如果struct是n't nullable,检查c#中struct是否为空
本文关键字:struct 检查 是否 如果 nullable | 更新日期: 2023-09-27 18:12:28
我有一些通用方法
T SomeMethod(Func<T> func){
T result = func();
if (result != null)
{ //.....}
}
如果T
是类,则工作良好。但如果T
是struct,我该怎么做?如果T
是struct
,如何检查是否为result == default(T)
?
注:我不想使用约束where T: class
或Nullable
类型。
更习惯的做法是效仿int.TryParse
。
public delegate bool TryFunction<T>(out T result);
T SomeMethod(TryFunction<T> func)
{
T value;
if(func(out value))
{
}
}
如果T
被编译为struct
,那么与null
的比较将始终计算为false
。c#语言规范
如果将类型参数类型T的操作数与null进行比较,且T的运行时类型为值类型,则比较结果为false。
考虑使用default(T):
private T SomeMethod<T>(Func<T> func)
{
var result = func();
if (result.Equals(default(T)))
{
// handling ...
return default(T);
}
return result;
}