Im пытается создать метод расширения в среде, где используется много отражений.Nullable, check for default
Цель метода - воссоздать, что делает default() во время выполнения.
Он отлично работает для всех, кроме тех, что недействительны. <> типы. Даже? -Типы работают правильно.
Я понятия не имею, как я могу узнать, если значение, присвоенное переменной объекта является Nullable <> а не «правильный тип valute»
Nullable.GetUnderlyingType-метод возвращает нуль в этом случае , но работает над? -Типами.
Мы знаем, что значение по умолчанию (Nullable) == null. Мой метод расширения дает неверные результаты, когда Nullable получает 0, так как 0 == default (int).
Надеюсь, вы получите то, что Iam пытается объяснить здесь, одним словом: - Как определить, является ли «случайный» объект Nullable, а не int?
Метод выглядит следующим образом (удалено любое кэширование для простоты) я взял деталь здесь How to check if an object is nullable?
public static bool IsDefault(this object obj)
{
if(obj == null)
return true;
else
{
Type objType = obj.GetType(); // This gives int32 for Nullabe<int> !?!
if(Nullable.GetUnderlyingType(objType) != null)
return false;
else if(objType.IsValueType)
return Object.Equals(obj, Activator.CreateInstance(objType);
else
return false;
}
}
Чтобы сделать это более ясно, что я не могу использовать общие вещи ...
Я боялся этого, ну спасибо. – CSharpie