【发布时间】:2013-07-01 11:48:54
【问题描述】:
我试图在使用大量反射的环境中创建扩展方法。
方法的目的是重新创建 default() 在运行时所做的事情。
它适用于除 Nullable 类型之外的所有类型。甚至 ?-Types 也能正常工作。
我不知道如何找出分配给对象变量的值是否为 Nullable 而不是“常规值类型”
Nullable.GetUnderlyingType-Method 在这种情况下返回 null,但适用于 ?-Types。
我们知道 default(Nullable) == null。 当 Nullable 分配为 0 时,我的扩展方法会产生错误的结果,因为 0 == default(int)。
我希望你能明白我在这里试图解释的内容,简而言之: - 如何确定“随机”对象是否为 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;
}
}
为了更清楚,我不能使用通用的东西......
【问题讨论】: