Является ли это безопасным и эффективным способом обработки чтения нулевых значений в БД с использованием дженериков?

#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 , вам нужно реализовать это как исключение.