检查Null运算符是否深入

dev*_*hog 2 c#

这是带有null运算符的语句.

this.Str = this.Str ?? "test";
Run Code Online (Sandbox Code Playgroud)

我知道当str为null时,"test"字符串值将被设置为str变量.

到目前为止这么好,但实际的问题是str首先不是null时发生的事情.

如果str不为空,这是否发生在引擎盖下?

this.Str = this.Str
Run Code Online (Sandbox Code Playgroud)

这意味着无论如何都会被召唤,对吧?此外,即使值没有改变,我将在setter中调用自定义逻辑,对吗?

我希望如果str不为null,则不会使用相同的值调用setter.

有人对此有深入了解吗?

很抱歉,如果这是重复的,请在评论中告诉我,我将删除此问题.

Ser*_*kiy 5

塞特会被召集.这里有两个运算符 - null-coalescing运算符,它首先执行并计算为Strgetter或"test"string 返回的值.第二个运算符是赋值运算符,它将计算值传递给Strsetter.

如果您不想执行自定义逻辑,请手动检查分配的值:

public string Str
{
    get { returns _str; }
    set
    {
        if (_str == value)
            return;

        _str = value;
        // custom logic
    }
}
Run Code Online (Sandbox Code Playgroud)

这将允许您仅在属性值更改时运行自定义逻辑,而不是每次向属性分配内容时运行自定义逻辑.