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





Если мы просто говорим о паре чисел, выбор самого большого не окажет заметного влияния на ваше общее использование плунжера и будет работать. Если вы говорите о большом количестве чисел, вам нужно использовать для них TryParse () и определить наименьший тип int, чтобы сэкономить память.
Все компы конечно. Вам необходимо определить верхний предел в зависимости от того, какими, по вашему мнению, будут требования ваших пользователей.
Если у вас действительно нет верхнего предела и вы хотите разрешить «неограниченные» значения, попробуйте добавить библиотеки времени выполнения .Net Java в свой проект, что позволит вам использовать класс java.math.BigInteger, который выполняет математические вычисления практически неограниченного размера. целое число.
Примечание. Библиотеки .Net Java поставляются с полной версией DevStudio, но я не думаю, что они поставляются с Express.
Просто хотел добавить это ... Я вспомнил, что во времена .NET 1.1 компилятор был оптимизирован так, что Операции int на самом деле быстрее, чем байтовые или короткие операции.
Я считаю, что это все еще актуально, но сейчас я провожу несколько тестов.
Обновлено: У меня есть неожиданное открытие: операции сложения, вычитания и умножения для краткости фактически возвращают int!
Каждый здесь, кто упомянул, что объявление Int16 спасает барана, должен получить голос против.
Ответ на ваш вопрос - использовать ключевое слово "int" (или, если хотите, используйте "Int32").
Это дает вам диапазон до 2,4 миллиарда чисел ... Кроме того, 32-битные процессоры будут лучше обрабатывать эти int ... также (и САМАЯ ВАЖНАЯ ПРИЧИНА) заключается в том, что если вы планируете использовать этот int почти по любой причине ... он, вероятно, будет должно быть "int" (Int32).
В структуре .Net 99,999% числовых полей (целых чисел) являются "целыми числами" (Int32).
Пример: Array.Length, Process.ID, Windows.Width, Button.Height и т. д., Т. Д. И т. Д. 1 миллион раз.
Обновлено: Я понимаю, что из-за моего сварливости меня отвергнут ... но это правильный ответ.
Зачем вам голосовать против ответов, в которых говорится, что Int16 занимает меньше оперативной памяти, чем Int32? Обычно это так, и это может быть важным фактором, если вам нужно хранить в памяти большой массив целых чисел. PS. Мне действительно понравилось ваше ворчание, и я не стал отрицать вашу за это. :)
Самая раздражающая вещь: Stream.Read и Stream.Write принимают смещения int, а Stream.Length длинный ... да! разбиение на части даже не предусмотрено!
потому что, если вы не работаете на компьютере 20-летней давности (с 16-битной оперативной памятью) или не используете сжатое хранилище в структуре, оптимизированной для памяти,
каждая переменная, объявленная и сохраненная в куче или в стеке, выровнена с границей, соответствующей Операционной системе и размеру аппаратной памяти, то есть на 32-битной машине под управлением 32-битной Windows даже короткий получает 4 байта памяти ...
Я не проверял это, но csharphelp.com/archives2/archive299.html заявляет: «Короткие числовые значения (эти значения менее 4 байтов) расширяются до 4 байтов при загрузке (копируются из памяти в стек) и сужаются при сохранении (копируются из стека в память). "
Повторять попытки TryParse () не имеет смысла, у вас уже объявлено поле. Вы не сможете передумать, если не сделаете это поле типа Object. Не хорошая идея.
Какие бы данные ни представляло поле, они имеют физический смысл. Это возраст, размер, количество и т. д. У физических величин есть реальные ограничения на их диапазон. Выберите тип int, который может хранить этот диапазон. Не пытайтесь исправить переполнение, это будет ошибка.
В отличие от наиболее популярного в настоящее время ответа, более короткие целые числа (например, Int16 и SByte) часто занимают меньше места в памяти, чем более крупные целые числа (например, Int32 и Int64). Вы можете легко проверить это, создав экземпляры больших массивов sbyte / short / int / long и используя perfmon для измерения размеров управляемой кучи. Верно, что многие разновидности CLR расширяют эти целые числа для оптимизации, зависящей от процессора, при выполнении над ними арифметических операций и т. д., Но когда они хранятся как часть объекта, они занимают ровно столько памяти, сколько необходимо.
Таким образом, вам определенно следует учитывать размер, особенно если вы будете работать с большим списком целых чисел (или с большим списком объектов, содержащих целочисленные поля). Вы также должны учитывать такие вещи, как соответствие CLS (которое запрещает любые беззнаковые целые числа в открытых членах).
Я согласен, что для простых случаев, таких как преобразование строки в целое число, Int32 (C# int) обычно имеет наибольший смысл и, скорее всего, то, что ожидают другие программисты.
Не забывайте, что если вам не нужны отрицательные числа, в C# также есть целые числа без знака (uint32, uint64).