0

假设我有这个函数,它为任何类型实例化一个具有默认/空值new的变量

public static T GetDefault<T>() where T : new() //body of this method is the question
{
    T t = new T();
    return t;
}

上述功能的问题是当我有类似int?for 的东西时T。因为如果我有

int? t = new int?();

t将是空的!我不希望发生这种情况,而是希望int返回的默认值是0.

为了解决这个问题,我可以对等GetDefault函数进行不同的重载int?bool?但这并不优雅。我也可以在函数内部检查类型是否为int?bool?,但我将如何实例化它的基本类型?

或者问题归结为如何识别是否T为可空结构以及如何实例化可空结构。

4

1 回答 1

3
Type realType = Nullable.GetUnderlyingType(typeof(T));
t = (T)Activator.CreateInstance(realType ?? typeof(T));
于 2012-10-14T23:16:24.130 回答