我有一个通用类,应允许任何类型,原始或其他类型。唯一的问题是使用default(T)
。当您对值类型或字符串调用default时,它将初始化为一个合理的值(例如空字符串)。调用default(T)
对象时,它返回null。由于各种原因,我们需要确保它不是原始类型,那么我们将拥有该类型的默认实例,而不是 null。这是尝试1:
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>();
}
}
但这感觉就像是在跳动。有没有更好的方法来处理字符串大小写?