我有一个包含可为空字符串的类,我想检查它们是否保持为空或有人设置了它们。
与字符串类似,该类包含可为空的整数,我可以通过与 .HasValue() 方法进行相等比较来执行此检查 - 似乎字符串没有这个?
那么如何检查它是否从 null 变为 notNull 呢?
public class Test
{
public string? a
public string? b
public int? c
}
var oldQ = new Test(c=123)
var newQ = new Test(c=546)
bool isStilValid = newQ.c.HasValue() == oldQ.c.HasValue() //(this is not possible?)&& newQ.b.HasValue() == oldQ.b.HasValue()
Run Code Online (Sandbox Code Playgroud)
为什么这是不可能的?
HasValueproperty 属于Nullable<T>struct,其中T也仅限于值类型。因此,HasValue仅适用于值类型。
可空引用类型是使用类型注释实现的,不能对可空值类型使用相同的方法。要检查引用类型的可为空性,您可以使用nullorIsNullOrEmpty方法进行比较(仅适用于字符串)。所以,你可以稍微重写你的代码
var oldQ = new Test() { c = 123 };
var newQ = new Test() { c = 456 };
bool isStilValid = string.IsNullOrEmpty(newQ.b) == string.IsNullOrEmpty(oldQ.b);
Run Code Online (Sandbox Code Playgroud)
或者只是使用常规比较null
bool isStilValid = (newQ.b != null) == (oldQ.b != null);
Run Code Online (Sandbox Code Playgroud)