#c# #.net #generics
#c# #.net #обобщения
Вопрос:
Я играл с дженериками и надеялся, что смогу получить некоторые отзывы или предложения по функции, которую я создал, чтобы помочь обрабатывать чтение нулевых значений из базы данных. Моя главная проблема заключается в операторе if. Есть ли лучший способ выяснить, является ли T строкой и т.д.? Спасибо.
public static T CheckNull<T>(object value)
{
if ((value != null) amp;amp; value.Equals(DBNull.Value))
{
if (object.ReferenceEquals(typeof(T), typeof(String)))
value = string.Empty;
else if (object.ReferenceEquals(typeof(T), typeof(Boolean)))
value = false;
else
value = null;
}
return (T)value;
}
Комментарии:
1. Спасибо вам всем. Теперь я только проверяю, является ли это строкой, и возвращаю string . Пустое значение else по умолчанию (T) для покрытия других типов.
Ответ №1:
Независимо от T
типа, вы можете вернуться к default(T)
, который предоставит значение по умолчанию для данного типа (, string.Empty
0
, false
null
и т.д. …) :
value = default(T);
Редактировать: default(string)
однако возвращает null
.
Комментарии:
1. Вызов
default(string)
возвращаетnull
не пустую строку.
Ответ №2:
Вам также необходимо охватить другие примитивные типы данных.
value = default(T);
Это возвращает null, если это ссылочный тип, в противном случае 0, false или что-либо другое является подходящим значением по умолчанию для данного типа T.
Примечание: значение по умолчанию (string) равно null
, а не string.Пусто. Если вы хотите, чтобы это было String.Empty
, вам нужно реализовать это как исключение.