Как получить значение по умолчанию для типа ValueType с отражением

Если у меня есть параметр универсального типа, который является типом значения, и я хочу знать, равно ли значение значению по умолчанию, я тестирую его следующим образом :

static bool IsDefault<T>(T value){
    where T: struct
    return value.Equals(default(T));
}

Если у меня нет параметра универсального типа, мне кажется, что мне придется использовать отражение. Если метод должен работать для всех типов значений, тогда Есть ли лучший способ выполнить этот тест, чем то, что я делаю здесь? :

static bool IsDefault(object value){
   if(!(value is ValueType)){
      throw new ArgumentException("Precondition failed: Must be a ValueType", "value");
   }
   var @default = Activator.CreateInstance(value.GetType());
   return value.Equals(@default);  
}

Кстати, есть ли что-нибудь, что я не рассматриваю здесь в отношении оценки структур, допускающих значение NULL?

9
задан smartcaveman 15 August 2011 в 17:01
поделиться