Выбор подходящего типа данных
Вы получили представление о различии между типами значений и ссылочными типами, а также о целочисленных типах и типах с плавающей запятой.
Предположим, что ваша задача — создать приложение, которое должно извлекать, обрабатывать и хранить данные различных типов. Какие типы данных используются?
В некоторых случаях это простой выбор. Например, если необходимо работать с текстом, то по умолчанию string
используется тип данных, если не требуется выполнить значительное количество объединения.
Но как насчет работы с числовыми данными? Имеются 11 разных вариантов. Как выбрать подходящий тип данных?
Выбор подходящего типа данных
С учетом наличия такого множества типов данных какими критериями следует руководствоваться при выборе оптимального типа для той или иной ситуации?
При оценке вариантов необходимо принять во внимание ряд важных факторов. Часто нет единственного правильного ответа, но некоторые ответы более верны, чем другие.
Выберите тип данных, соответствующий требованиям диапазона значений границ приложения.
Выбрав подходящий тип для переменной, можно ограничить размер хранящихся в ней данных. Например, если вы знаете, что определенная переменная должна хранить только число от 1 до 10 000 в противном случае она выходит за пределы ожидаемых значений, скорее всего, избежать byte
и sbyte
так как их диапазоны слишком низки.
Кроме того, скорее всего, вам не потребуется int
long
, uint
и ulong
потому что они могут хранить больше данных, чем это необходимо. Аналогичным образом вы, вероятно, проигнорируете типы float
, double
и decimal
, если не нужны дробные значения. Вы можете сузить его до short
и ushort
, из которых оба могут быть жизнеспособными. Если вы уверены, что отрицательное значение не будет иметь смысла в приложении, вы можете выбрать ushort
(положительное целое число без знака, от 0 до 65 535). Теперь при присвоении переменной типа ushort
любого значения, выходящего за пределы диапазона от 0 до 65 535, будет возникать исключение. Это позволяет неявно реализовать проверку корректности в приложении.
Начните с выбора типа данных, чтобы соответствовать данным (не оптимизировать производительность)
Вы можете заманчиво выбрать тип данных, который использует наименьшие биты для хранения данных, что повышает производительность приложения. Однако один из самых важных советов, связанных с производительностью приложения (то есть скоростью его работы), звучит так: «Избегайте предварительной оптимизации». Вы должны противостоять соблазну, чтобы угадать части кода, включая выбор типов данных, которые могут повлиять на производительность вашего приложения.
Многие полагают, что тип, вмещающий меньше данных, должен использовать меньше ресурсов процессора и памяти компьютера, чем тип большего размера. Вместо этого следует выбрать наиболее удобный тип, после чего вы сможете эмпирически измерить производительность приложения с помощью специального программного обеспечения и получить фактическую информацию о частях приложения, которые отрицательно сказываются на производительности.
Выбор типов данных на основе типов входных и выходных данных используемых функций библиотеки
Предположим, вам необходимо работать с диапазоном лет между двумя датами. Так как приложение является бизнес-приложением, вы можете определить, что вам нужен только диапазон от около 1960 до 2200. Вы можете подумать, чтобы попытаться работать с byte
ним, так как он может представлять числа от 0 до 255.
Однако если взглянуть на встроенные методы классов System.TimeSpan
и System.DateTime
, то окажется, что они в основном принимают значения типов double
и int
. Если вы выберете sbyte
, вам постоянно придется приводить byte
к double
или int
и наоборот. В этом случае может оказаться более целесообразным выбрать int
, если требуется точность до секунд, и double
, если требуется более высокая точность.
Выбор типов данных на основе влияния на другие системы
Иногда необходимо учитывать, как данные будут использоваться другими приложениями или системами, например базой данных. Так, система типов SQL Server отличается от системы типов C#. Поэтому для сохранения данных в базе данных требуется сопоставление типов.
Если приложение предназначено для взаимодействия с базой данных, скорее всего, потребуется рассмотреть способ хранения данных и объем хранимых данных. Выбор большего типа данных может повлиять на объем (и стоимость) физического хранилища, необходимого для хранения всех данных, которые будет создавать приложение.
Когда сомневайтесь, придерживайтесь основных принципов
Хотя вы рассмотрели несколько соображений, как вы начинаете работу, для простоты вы должны предпочесть подмножество основных типов данных, в том числе:
-
int
для большинства целых чисел; -
decimal
для денежных значений; -
bool
для значений "истина" или "ложь"; -
string
для буквенно-цифровых значений.
Выбор специальных сложных типов для особых ситуаций
Не переиздать типы данных, если один или несколько типов данных уже существуют для заданной цели. В следующих примерах показано, где могут быть полезны определенные типы данных .NET:
-
byte
: работа с закодированными данными, поступающими из других компьютерных систем или с помощью различных символьных наборов. -
double
: работа с геометрическими или научными целями. типdouble
часто применяется в графических играх; -
System.DateTime
для значений даты и времени; -
System.TimeSpan
для диапазона лет, месяцев, дней, часов, минут, секунд и миллисекунд;
Кратко
При выборе типов данных для кода следует учитывать несколько вариантов. Продумайте свой выбор, и если у вас нет хорошей причины, попробуйте придерживаться основных типов, таких как int
, decimal
, string
и bool
.