我有一个泛型类,应该允许任何类型,原始或其他.唯一的问题是使用default(T)
.在值类型或字符串上调用default时,它会将其初始化为合理的值(例如空字符串).调用default(T)
对象时,它返回null.由于各种原因,我们需要确保如果它不是基本类型,那么我们将有一个类型的默认实例,而不是 null.这是尝试1:
T createDefault()
{
if(typeof(T).IsValueType)
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
Run Code Online (Sandbox Code Playgroud)
问题 - 字符串不是值类型,但它没有无参数构造函数.那么,目前的解决方案是:
T createDefault()
{
if(typeof(T).IsValueType || typeof(T).FullName == "System.String")
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
Run Code Online (Sandbox Code Playgroud)
但这感觉就像一块垃圾.有没有更好的方法来处理字符串案例?
Mat*_*ton 152
请记住,default(string)为null,而不是string.Empty.您可能需要在代码中使用特殊情况:
if (typeof(T) == typeof(String)) return (T)(object)String.Empty;
Run Code Online (Sandbox Code Playgroud)
Fly*_*wat 14
if (typeof(T).IsValueType || typeof(T) == typeof(String))
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
Run Code Online (Sandbox Code Playgroud)
未经测试,但首先想到的是.
归档时间: |
|
查看次数: |
82806 次 |
最近记录: |