Как правило, вы всегда должны использовать наиболее конкретный тип данных для ваших данных.
Например, если вы используете Entity Framework для извлечения данных из базы данных, EF автоматически использует тип данных, ближайший к тому, который используется в базе данных.
Есть две проблемы с этим в C #.
Во-первых, большинство разработчиков на C # используют только int
для представления целых чисел (если нет причин использовать long
). Это означает, что другие разработчики не будут думать о проверке типа данных, поэтому они получат ошибки переполнения, упомянутые выше. Во - вторых, и более важным вопросом, является / в том , что .NET в исходные арифметические операторы поддерживаются только int
, uint
, long
, ulong
, float
, двойной, и decimal
*. Это все еще актуально сегодня (см. Раздел 7.8.4 в спецификации языка C # 5.0 ). Вы можете проверить это самостоятельно, используя следующий код:
byte a, b;
a = 1;
b = 2;
var c = a - b; //In visual studio, hover over "var" and the tip will indicate the data type, or you can get the value from cName below.
string cName = c.GetType().Namespace + '.' + c.GetType().Name;
Результат нашего byte
- byte
это int
(System.Int32
).
Эти два вопроса привели к распространенной практике «единственное использование целых чисел».
Поэтому, чтобы ответить на ваш вопрос, в C # обычно стоит придерживаться следующих int
правил:
- Автоматический генератор кода использовал другое значение (например, Entity Framework).
- Все остальные разработчики проекта знают, что вы используете менее распространенные типы данных (включая комментарий, указывающий, что вы использовали тип данных и почему).
- Менее распространенные типы данных обычно уже используются в проекте.
- Программа требует преимуществ менее распространенного типа данных (у вас есть 100 миллионов таких данных, которые необходимо хранить в оперативной памяти, поэтому разница между a
byte
и a int
или a int
и a long
является критической, или арифметические различия без знака уже упоминались).
Если вам нужно сделать математику с данными, придерживайтесь общих типов.
Помните, что вы можете кастовать из одного типа в другой. Это может быть менее эффективно с точки зрения процессора, поэтому вам, вероятно, лучше использовать один из 7 распространенных типов, но это вариант, если необходимо.
Enumerations ( enum
) - одно из моих личных исключений из приведенных выше рекомендаций. Если у меня есть только несколько вариантов, я укажу перечисление в байтах или коротких. Если мне понадобится последний бит во помеченном перечислении, я укажу тип, который должен быть, uint
чтобы я мог использовать hex для установки значения для флага.
Если вы используете свойство с кодом, ограничивающим значение, обязательно объясните в итоговом теге, какие существуют ограничения и почему.
Псевдонимы * C # используются вместо имен .NET, например, System.Int32
так как это вопрос C #.
Примечание: был блог или статья от разработчиков .NET (которую я не могу найти), в которой указывалось на ограниченное количество арифметических функций и некоторые причины, по которым они не беспокоились об этом. Насколько я помню, они указали, что не планируют добавлять поддержку для других типов данных.
Примечание. Java не поддерживает типы данных без знака и ранее не поддерживала 8- или 16-битные целые числа. Поскольку многие разработчики на C # пришли из Java-опыта или должны были работать на обоих языках, ограничения одного языка иногда искусственно накладывались на другой.