2014-02-03 2 views
-1

Я добавляю новый метод extension для проверки null значение для любого объекта по следующим критериям:
IsNull() продление для проверки нулевого значения для любого объекта

  1. Если вернуться true если значение class object является null
  2. Должен возвращаться true, если объект имеет тип string и имеет значение null or Empty
  3. Должно возвращать true, если объект имеет тип DateTime и имеющий Min value.
  4. Любое другое условие null нужно проверить (Пожалуйста, укажите, если требуется.)

Вот IsNull() метод продление:.

public static bool IsNull(this object obj) 
{ 
    if (obj == null || obj == DBNull.Value) 
     return true; 

    if (obj.GetType() == typeof(string)) 
     return string.IsNullOrEmpty(obj.ToString()); 

    if (obj.GetType() == typeof(DateTime)) 
    { 
     DateTime _dateValue = DateTime.MinValue; 

     if (DateTime.TryParse(obj.ToString(), out _dateValue) && _dateValue == DateTime.MinValue) 
     return true; 
    } 

    return false; 
} 

Теперь мой вопрос:

  1. Должен ли я добавить проверку по-другому для значения и ссылочного типа объект?
  2. Этот метод расширения обрабатывает все типы null для любого объекта ?
  3. Любые предложения или улучшения необходимо добавить в расширение?
+3

Я не понимаю. Вы пишете расширение, и вам нужно, чтобы мы сказали вам, что он должен делать? Так почему вы его пишете? И кстати. 'string.Empty' - пустая строка, а не' null', 'DateTime.Min! = null'. Я действительно не понимаю, зачем вам нужен такой метод. – MarcinJuraszek

+0

Если вам нужны методы расширения, которые действуют по-разному на основе типа, напишите методы расширения на * те типы *. –

+1

Для обзора кода goto http://codereview.stackexchange.com/ –

ответ

3

Несколько наблюдений:

1) Тип значения никогда не будет null. Когда вызывается тип значения .. он будет помещен в object .. и не будет null (если вы не обернете его в Nullable<T>).

2) Ваш метод больше не проверяет null .. он также проверяет минимальное значение и пустые строки. Пустая строка не null - ее пустое значение. Минимальное значение не равно null .. его значение. Здесь он несет слишком большую ответственность и должен быть переименован.

3) Учитывая то, что я сказал выше .. вы могли бы просто сделать это вместо того, чтобы писать свою собственную функцию:

if (variable == default(variable.GetType())) 

Так что проверяет по умолчанию всех типов .. типы значений, такие как DateTime, int, и классы для null. Тогда ваша единственная специальная проверка для DBNull.Value.

+1

Да, и он вернет * 'IsNull (0)' * как 'true'. Действительно отличный и полезный метод. – MarcinJuraszek

+2

@MarcinJuraszek Это примерно так же полезно, как 'DateTime.MinValue.IsNull()' и 'String.Empty.IsNull()' return 'true'. –

+0

Третье и четвертое определения null равны 0, поэтому он может быть несколько действительным ... http://dictionary.reference.com/browse/null – charlieparker

3

Нужно ли добавить проверку проверки для объекта Value и Reference type?

Типы значений не могут быть пустыми.

Этот метод externtion обрабатывает все типы нулевой проверки для любого объекта?

Похоже, (кроме типов значений)

Любого предложение или улучшения нужно добавить в расширении?

Как я уже говорил типы значений не может быть null, так что вы можете добавить дополнительное условие, чтобы проверить тип является ли тип значения или нет, если да, то вы можете возвратить false

if(obj.GetType().IsValueType) return false; 

Кстати, если вы пишете это до проверки DateTime, ваше условие DateTime станет недоступным. В любом случае это не имеет смысла, но это ваш выбор. Если вы хотите вернуть true, когда значение равно DateTime.MinValue, это полностью зависит от вас.

+0

Тип значения может быть нулевым, как 'int?', В этом случае он должен возвращать true –

+0

@AnkushMadankar. У вас могут быть типы значений NULL, но вы не сможете передать их в эту функцию, которая принимает объект. Он не будет компилироваться. – ansible

+3

@ansible Неверно. Он делает .. и он пройдет «нуль». –

Смежные вопросы