这是带有 null 运算符的语句。
this.Str = this.Str ?? "test";
我知道当 str 为空时,“测试”字符串值将设置为 str 变量。
到目前为止一切顺利,但真正的问题是当 str 不为 null 时会发生什么。
如果 str 不为空,这是否会在幕后发生?
this.Str = this.Str
这意味着 setter 无论如何都会被调用,对吧?此外,即使值没有改变,我在 setter 中的自定义逻辑也会被调用,对吗?
如果 str 不为空,我希望不会使用相同的值调用 setter。
有人对此有深入的了解吗?
抱歉,如果这是重复的,请在评论中告诉我,我会删除这个问题。
最佳答案
Setter 将被调用。这里有两个运算符 - null-coalescing 运算符,它首先执行并评估为 Str
getter 或 "test"
字符串返回的值。第二个运算符是赋值运算符,它将评估的值传递给Str
setter。
如果您不想执行自定义逻辑,请手动检查分配的值:
public string Str
{
get { returns _str; }
set
{
if (_str == value)
return;
_str = value;
// custom logic
}
}
这将允许您仅在属性值更改时运行自定义逻辑,而不是每次您为属性赋值时。
关于c# - 深入检查 Null 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21982206/