Преобразование в int16, int32, int64-как вы знаете, какой из них выбрать?

Мне часто приходится преобразовывать восстановленное значение (обычно в виде строки), а затем преобразовывать его в int. Но в C# (.Net) вы должны выбрать int16, int32 или int64 - как вы знаете, какой из них выбрать, когда вы не знаете, насколько большим будет ваш полученный номер?

6 ответов


все здесь, кто упомянул, что объявление Int16 сохраняет ОЗУ, должно получить downvote.

ответ на ваш вопрос заключается в использовании ключевого слова "int" (или, если вам это нравится, используйте "Int32").

Это дает вам диапазон до 2,4 миллиарда чисел... Кроме того, 32-битные процессоры будут обрабатывать эти ints лучше... также (и САМАЯ ВАЖНАЯ ПРИЧИНА) это если вы планируете использовать этот int почти по любой причине... вероятно, это должен быть " int" (Типа int32).

в .Net framework 99,999% числовых полей (целых чисел) являются "ints" (Int32).

Пример: Массив.Длина, Процесс.ID, Windows.Ширина, Кнопка.Высота, etc, etc, etc 1 миллион времен.

EDIT: я понимаю, что моя сварливость собирается заставить меня проголосовать... но это правильный ответ.


просто хотел добавить, что... Я вспомнил, что во времена .NET 1.1 компилятор был оптимизирован так, что операции " int " на самом деле быстрее, чем байтовые или короткие операции.

Я считаю, что он все еще держится сегодня, но сейчас я провожу некоторые тесты.


EDIT: у меня есть неожиданное открытие: операции сложения, вычитания и умножения для коротких(s) фактически возвращают int!


повторная попытка TryParse () не имеет смысла, у вас уже объявлено поле. Вы не можете изменить свое мнение, если вы не сделаете это поле типа Object. Не очень хорошая идея.

любые данные, которые представляет поле, имеют физическое значение. Это возраст, размер, количество и т. д. Физические величины имеют реалистичные ограничения в своем диапазоне. Выберите тип int, который может хранить этот диапазон. Не пытайтесь исправить переполнение, это будет ошибка.


В отличие от текущего наиболее популярного ответа, более короткие целые числа (например, Int16 и SByte) часто занимают меньше места в памяти, чем большие целые числа (например, Int32 и Int64). Вы можете легко проверить это, создав экземпляр больших массивов sbyte/short/int / long и используя perfmon для измерения управляемых размеров кучи. Верно, что многие ароматы CLR расширяют эти целые числа для оптимизации, специфичной для ЦП, при выполнении арифметики на них и т. д., Но при хранении как части объекта они занимают только столько памяти, сколько необходимо.

Итак, вы определенно должны учитывать размер, особенно если вы будете работать с большим списком целых чисел (или с большим списком объектов, содержащих целочисленные поля). Вы также должны рассмотреть такие вещи, как CLS-compliance (который запрещает любые целые числа без знака в открытых членах).

для простых случаев, таких как преобразование строки в целое число, я согласен, что Int32 (C# int) обычно имеет наибольший смысл и, вероятно, что другое программисты будут ожидать.


Если мы просто говорим о нескольких числах, выбор самого большого не будет иметь заметной разницы в общем использовании ОЗУ и будет просто работать. Если вы говорите о множестве чисел, вам нужно будет использовать TryParse() на них и выяснить наименьший тип int, чтобы сохранить ОЗУ.


все компьютеры конечны. Вам нужно определить верхний предел на основе того, что вы думаете, ваши требования пользователей будут.

Если у вас действительно нет верхнего предела и вы хотите разрешить "неограниченные" значения, попробуйте добавить библиотеки среды выполнения .Net Java в свой проект, что позволит вам использовать java.математика.BigInteger класс-который делает математику на почти неограниченный размер целого числа.

Примечание: библиотеки .Net Java поставляются с полной DevStudio, но я не думаю, что они поставляются с Экспресс.