给定一个类型,您如何确定将其装箱为哪种类型?

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 就像您已经实施的那样。