为什么可为空的字符串没有 hasValue() 方法?
why dont nullable strings have a hasValue() method?
我有一个 class,其中包含一个可为 null 的字符串,我想检查它们是否保持为 null 或有人设置了它们。
与字符串类似,class 包含可为空的整数,我可以通过相等比较来执行此检查
使用 .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()
为什么这不可能?
HasValue
属性 属于 Nullable<T>
结构,其中 T
也仅限于值类型。因此,HasValue
仅适用于值类型。
可空引用类型是使用类型注释实现的,不能对可空值类型使用相同的方法。要检查引用类型的可空性,您可以使用 null
或 IsNullOrEmpty
方法(仅适用于字符串)进行比较。所以,你可以稍微重写你的代码
var oldQ = new Test() { c = 123 };
var newQ = new Test() { c = 456 };
bool isStilValid = string.IsNullOrEmpty(newQ.b) == string.IsNullOrEmpty(oldQ.b);
或者只是使用与 null
的常规比较
bool isStilValid = (newQ.b != null) == (oldQ.b != null);
与 null
相比的等价物是:
bool isStillValid = (newQ.c != null) == (oldQ.c != null) && (newQ.b != null) == (oldQ.b != null);
这相当于您的原始代码,但我不确定原始代码是否正确...
isStillValid
如果被测试为 null 的所有项目实际上都是 null,则为真。这真的是你想要的吗?
也就是说,如果 newQ.c
为空且 oldQ.c
为空且 newQ.b
为空且 oldQ.b
为空则 isStillValid
将为 true
.
Nullable<T>
类型需要类型 T
,它是不可为 null 的值类型,例如 int
或 double
。
string
类型变量已经为 null,因此可为 null 的字符串类型变量没有意义。
您需要使用 string.IsNullOrEmpty
或简单地 null
我有一个 class,其中包含一个可为 null 的字符串,我想检查它们是否保持为 null 或有人设置了它们。
与字符串类似,class 包含可为空的整数,我可以通过相等比较来执行此检查 使用 .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()
为什么这不可能?
HasValue
属性 属于 Nullable<T>
结构,其中 T
也仅限于值类型。因此,HasValue
仅适用于值类型。
可空引用类型是使用类型注释实现的,不能对可空值类型使用相同的方法。要检查引用类型的可空性,您可以使用 null
或 IsNullOrEmpty
方法(仅适用于字符串)进行比较。所以,你可以稍微重写你的代码
var oldQ = new Test() { c = 123 };
var newQ = new Test() { c = 456 };
bool isStilValid = string.IsNullOrEmpty(newQ.b) == string.IsNullOrEmpty(oldQ.b);
或者只是使用与 null
bool isStilValid = (newQ.b != null) == (oldQ.b != null);
与 null
相比的等价物是:
bool isStillValid = (newQ.c != null) == (oldQ.c != null) && (newQ.b != null) == (oldQ.b != null);
这相当于您的原始代码,但我不确定原始代码是否正确...
isStillValid
如果被测试为 null 的所有项目实际上都是 null,则为真。这真的是你想要的吗?
也就是说,如果 newQ.c
为空且 oldQ.c
为空且 newQ.b
为空且 oldQ.b
为空则 isStillValid
将为 true
.
Nullable<T>
类型需要类型 T
,它是不可为 null 的值类型,例如 int
或 double
。
string
类型变量已经为 null,因此可为 null 的字符串类型变量没有意义。
您需要使用 string.IsNullOrEmpty
或简单地 null