给定一个类型,您如何确定将其装箱为哪种类型?
Given a Type, how do you determine what type it is boxed as?
根据 documentation:
When a nullable type is boxed, the common language runtime automatically boxes the underlying value of the Nullable object, not the Nullable object itself...
在代码中:
public Type GetBoxedType(Type type)
{
Type result;
if (Nullable.GetUnderlyingType(type) != null)
{
result = Nullable.GetUnderlyingType(type);
}
else
{
throw new NotImplementedException();
}
return result;
}
如何将此方法推广到所有封闭类型?
如果我没有正确理解您的要求,这就是您想要的:
Type GetBoxedType(Type type)
{
var underlyingType = Nullable.GetUnderlyingType(type);
return underlyingType ?? type;
}
对于引用类型,它 return 是相同的类型(即对于 List<string>
它将 return List<string>
,因为引用类型没有装箱)。
对于 Nullable<T>
以外的值类型,它也会 return 相同的类型(例如 int
代表 int
),因为它们是这样装箱的。
对于 Nullable<T>
,它将 return T
就像您已经实施的那样。
根据 documentation:
When a nullable type is boxed, the common language runtime automatically boxes the underlying value of the Nullable object, not the Nullable object itself...
在代码中:
public Type GetBoxedType(Type type)
{
Type result;
if (Nullable.GetUnderlyingType(type) != null)
{
result = Nullable.GetUnderlyingType(type);
}
else
{
throw new NotImplementedException();
}
return result;
}
如何将此方法推广到所有封闭类型?
如果我没有正确理解您的要求,这就是您想要的:
Type GetBoxedType(Type type)
{
var underlyingType = Nullable.GetUnderlyingType(type);
return underlyingType ?? type;
}
对于引用类型,它 return 是相同的类型(即对于 List<string>
它将 return List<string>
,因为引用类型没有装箱)。
对于 Nullable<T>
以外的值类型,它也会 return 相同的类型(例如 int
代表 int
),因为它们是这样装箱的。
对于 Nullable<T>
,它将 return T
就像您已经实施的那样。