为什么可空字符串没有 hasValue() 方法?

kaf*_*fka 8 c# nullable

我有一个包含可为空字符串的类,我想检查它们是否保持为空或有人设置了它们。

与字符串类似,该类包含可为空的整数,我可以通过与 .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)

为什么这是不可能的?

Pav*_*ski 6

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)

  • @SᴇM:属性不是方法。属性*实现*为*一对方法*,但这是一个实现细节。属性和方法都是*成员*。 (2认同)