具有泛型的可空基元

Lun*_*ore 1 c# generics resharper nullable

我试图在可空的布尔值上找到一个非空验证的正确方法.我也希望能够对其他一些领域做同样的事情,包括字符串,整数等,所以我想在方法中使用泛型.这是一个可能发生的事情的例子.

bool? myValue = null;
bool valid = ValidateNotNull(myValue);
Run Code Online (Sandbox Code Playgroud)

这里有一些验证码:

public bool ValidateNotNull<T>(T nullableField)
{
    return nullableField != null;
}
Run Code Online (Sandbox Code Playgroud)

我发现这类问题的所有答案都建议在方法签名中添加一个where T : struct或者where T: class,或者default(T)在比较中使用,这些都不适用于bool,其中false有效值.

还有其他建议吗?代码编译,但Resharper对于它认为可能是原始值的值的空值比较感到不满意,而且我很想知道我应该做些什么来振作起来.

注意:这不是完整的代码.我仍然有兴趣保持这种类型.这也不是我遇到问题的唯一地方.

NB2:是的,它编译并正常工作.我真正想知道的是,是否有一个代码解决方案可以阻止Resharper抱怨,或者是一种惯用的方法来做这个我不知道的事情.

Sea*_*ean 6

下面的代码将验证可空类型和引用类型:

 public bool ValidateNotNull<T>(Nullable<T> nullableField) where T:struct
 {
  return nullableField.HasValue;
 }

 public bool ValidateNotNull<T>(T nullableField) where T:class
 {
  return nullableField!=null;
 }
Run Code Online (Sandbox Code Playgroud)