Ответ 1
Я думаю, что использование "синего" int
, string
и т.д. может быть немного интуитивным для чтения. В противном случае я использую класс при вызове на нем статического метода, т.е. Int32.TryParse()
В "Стандарте кодирования С#" Juval Lowy, доступном на www.idesign.net, рекомендуется использовать предопределенные типы С# вместо псевдонимов в пространстве имен System
.
object NOT Object
string NOT String
int NOT Int32
В чем преимущество этого? Как они отличаются? Я следовал этому совету в своей собственной кодировке, но никогда не знал, как они отличаются.
Я думаю, что использование "синего" int
, string
и т.д. может быть немного интуитивным для чтения. В противном случае я использую класс при вызове на нем статического метода, т.е. Int32.TryParse()
В большинстве случаев они неожиданно отличаются друг от друга, когда кто-то достаточно глуп, чтобы вызвать тип (или свойство /field/etc ) String
(например), поскольку String
всегда ссылается на global::System.String
, где-as String
может быть YourNamespace.String
.
Ближе всего вы можете перейти к псевдониму С# @string
, который имеет тенденцию торчать как больной палец.
Я предпочитаю псевдонимы С#.
btw, здесь интересный способ общаться с кем-либо с помощью dynamic
слишком много:
using dynamic = System.Object;
Они действительно не отличаются. Лично я тоже использую псевдонимы, но Джефф Рихтер выступает за полную противоположность. Сгенерированный код будет точно таким же. Используйте то, что вы найдете наиболее читаемым (и старайтесь быть последовательным).
Одна вещь, с которой большинство людей соглашается: при написании API используйте имя типа, а не псевдоним, поэтому:
int ReadInt32()
а не
int ReadInt()
часть int
здесь не имеет значения - она не является частью имени и может быть соответствующим образом отображена для любого пользователя с использованием любого языка... но имя метода должно быть нейтральным по отношению к языку, что означает использование типа имя.
В одном месте, где вы должны использовать псевдоним, указывается базовый тип для перечисления:
enum Foo : byte // Valid
enum Foo : System.Byte // Invalid
В дополнение к тому, что сказал Джон, это еще одна разница.
var x = (Int32)-y; // Does not compile.
var x = (int)-y; // Negates the value of y and casts as an int.
Это из-за правила устранения неоднозначности грамматики, определенного в §7.6.6 спецификации языка программирования С#.
Здесь другое отличие от компилятора:
public enum MyEnum : Byte {Value1, Value2} //does not compile
public enum MyEnum : byte {Value1, Value2} //ok
Я всегда использую псевдонимы при указании типа в параметре, признаке свойства или метода или в поле (так: почти везде), за исключением случаев вызова статического члена для такого типа.
String.Format("{0}", 1);
Int32.Parse("123");
String.IsNullOrEmpty(value);
Единственное отличие в том, что они лучше читать (это, конечно, вопрос мнения). Скомпилированный результат - это точно такой же байт-код.
Генератор кода Entity Framework использует предопределенные типы, поэтому, если вы хотите полностью реализовать правила стиля кодирования Visual Studio 2017, вам нужно будет выбрать предопределенные типы (int вместо Int32 и т.д.). В противном случае ваш сгенерированный код не будет соответствовать.
(Опции- > Текстовый редактор- > С# → Стиль кода- > Общий- > предопределенный тип)