我有一些通用的方法
T SomeMethod(Func<T> func){
T result = func();
if (result != null)
{ //.....}
}
如果T
是班级,那就很好。但是如果T
是struct,我该怎么办?如果result == default(T)
为T
,我如何检查struct
是否有效?
P.S。我不想使用约束where T: class
或Nullable
类型。
答案 0 :(得分:2)
如果将T
编译为struct
,那么与null
的比较将始终评估为false
。这将在C#语言规范的第7.9.6节中介绍
如果将类型参数类型T的操作数与null进行比较,并且T的运行时类型是值类型,则比较结果为false。
答案 1 :(得分:2)
更为惯用的做法是遵循int.TryParse
之类的内容。
public delegate bool TryFunction<T>(out T result);
T SomeMethod(TryFunction<T> func)
{
T value;
if(func(out value))
{
}
}
答案 2 :(得分:0)
考虑使用默认值(T):
private T SomeMethod<T>(Func<T> func)
{
var result = func();
if (result.Equals(default(T)))
{
// handling ...
return default(T);
}
return result;
}