我试图在使用大量反射的环境中创建扩展方法。
这些方法的目的是重新创建 default() 在运行时所做的事情。
它适用于除那些 Nullable<> 类型之外的所有内容。甚至 ?-Types 也能正常工作。
我不知道如何找出分配给对象变量的值是否为 Nullable<> 而不是“常规值类型”
Nullable.GetUnderlyingType-Method 在这种情况下返回 null,但适用于 ?-Types。
我们知道 default(Nullable) == null。当 Nullable 分配为 0 时,我的扩展方法会产生错误的结果,因为 0 == default(int)。
我希望你能得到我在这里试图解释的内容,简而言之: - 我如何确定“随机”对象是否是 Nullable 而不是 int ?
该方法看起来像这样(为简单起见,删除了任何缓存)我从这里获取了部分如何检查对象是否可以为空?
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;
}
}
为了更清楚,我不能使用通用的东西......