我有一个泛型类,它应该允许任何类型,基本类型或其他类型。唯一的问题是使用 default(T)
。当对值类型或字符串调用 default 时,它将其初始化为一个合理的值(如空字符串)。当您对一个对象调用 default(T)
时,它返回 null。由于各种原因,我们需要确保,如果它不是一个基元类型,那么我们将有一个类型的默认实例,没有 null。下面是第一种尝试:
T createDefault()
{
if(typeof(T).IsValueType)
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
问题字符串不是值类型,但它没有无参数构造函数。因此,目前的解决方案是:
T createDefault()
{
if(typeof(T).IsValueType || typeof(T).FullName == "System.String")
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
但是这感觉像是一个组装件,有没有更好的方法来处理这个线盒?