如果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,我该怎么做?如果Tstruct,如何检查是否为result == default(T) ?

注:我不想使用约束where T: classNullable类型。

如果struct是n't nullable,检查c#中struct是否为空

更习惯的做法是效仿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#语言规范

第7.9.6节介绍了这一点。

如果将类型参数类型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;
}