Методы кодирования для С# Nullable type
Я никогда не использовал типы NULL в моем коде С#. Теперь я решил изменить свою практику кодирования, введя типы NULL в свой код.
Каковы основные изменения в практике кодирования, должны быть сделаны при переходе от обычных типов данных к нулевым типам данных в случае программирования приложений?
В каких областях следует позаботиться?
В каких точках я должен всегда следить?
Ответы
Ответ 1
Nullable<T>
полезен, когда вам нужно возможное недопустимое состояние для типа значения или если данные извлекаются из базы данных который может содержать значение null
для столбца. Это очень часто встречается в каком-то старом коде FORTRAN. Я переношу на С# для отрицательных значений или 0, но это очень сложно, особенно когда значения используются в математических функциях. Более явно использовать Nullable<T>
для отображения возможного недопустимого состояния.
Следует отметить, что одно и то же:
Nullable<int> myNullableInt;
int? myNullableInt;
Ответ 2
Не используйте типы с нулевым значением, потому что они являются "замечательной новой вещью", которую вы обнаружили.
Используйте их там, где они применимы и действительно полезны.
У них есть накладные расходы, и если они используются неправильно, они излишне увеличивают сложность вашего кода.
Вы также должны быть осторожны, чтобы избежать нулевых различий, поэтому они создают дополнительную нагрузку на программистов, работающих с этим кодом. (В некоторых случаях это предпочтительнее стоимости обходного подхода, хотя!)
Ответ 3
Кроме того, я нахожу следующее свойство полезным:
public bool? IsHappy { get; set; }
Это позволяет мне иметь трехзначное логическое значение: да, нет, не ответил.
Ответ 4
Несколько других хороших идей для использования типов с нулевым значением:
- Не забывайте о гибкости синтаксиса.
Nullable<int>
совпадает с int?
- Проверить значение null (
var.HasValue
) и применить его к базовому типу, прежде чем использовать его в качестве базового типа.
Ответ 5
Они кажутся подходящими для начального значения некоторых переменных типа значения.
int? lastCodeReceived;
if (lastCodeReceived.HasValue)
{
// At least one code has been received.
}
Ответ 6
Я редко использую типы с нулевым значением. Единственное место, где я их использую, - это когда я имею дело с нулевыми типами в базе данных.