我有一个通用类,它应该允许任何类型,原始类型或其他类型。唯一的问题是使用 default(T)
。当您对值类型或字符串调用 default 时,它会将其初始化为合理的值(例如空字符串)。当您在对象上调用 default(T)
时,它返回 null。由于各种原因,我们需要确保如果它不是原始类型,那么我们将拥有该类型的默认实例,not 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>();
}
}
但这感觉就像是一场混战。有没有更好的方法来处理字符串大小写?
最佳答案
请记住 default(string) 是 null,而不是 string.Empty。您可能需要代码中的特殊情况:
if (typeof(T) == typeof(String)) return (T)(object)String.Empty;
关于c# - 测试泛型类型是否为字符串的最佳方法? (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31498/