Як правило, ви завжди повинні використовувати для своїх даних найбільш конкретний тип даних.
Якщо, наприклад, ви використовуєте 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
і an int
або int
a long
є критичною, або арифметичні відмінності неподписаних вже згаданих).
Якщо вам потрібно зробити математику за даними, дотримуйтесь загальних типів.
Пам'ятайте, що ви можете передавати один тип до іншого. Це може бути менш ефективно з точки зору процесора, тому вам, мабуть, краще з одним із 7 поширених типів, але це варіант, якщо це потрібно.
Перерахування ( enum
) - одне з моїх особистих винятків із вищезазначених вказівок. Якщо у мене є лише кілька варіантів, я визначу, що перерахунок буде байтом або коротким. Якщо мені потрібен останній біт у переліченому переліченні, я вкажу тип, який повинен бути, uint
щоб я міг використовувати шістнадцятковий для встановлення значення для прапора.
Якщо ви використовуєте властивість із кодом, що обмежує значення, обов’язково поясніть у тезі підсумків, які обмеження існують та чому.
* Псевдоніми C # використовуються замість імен .NET, як-от, System.Int32
оскільки це питання C #.
Примітка. У розробниках .NET був блог або стаття (яку я не можу знайти), де вказувалося на обмежену кількість арифметичних функцій та деякі причини, чому вони не турбувалися про це. Як я пам’ятаю, вони вказали, що не планують додавати підтримку для інших типів даних.
Примітка: Java не підтримує неподписані типи даних і раніше не підтримувала 8 або 16 бітових цілих чисел. Оскільки багато розробників C # походять з Java або потрібно працювати на обох мовах, обмеження однієї мови іноді штучно накладаються на іншу.