【发布时间】:2019-06-06 21:58:26
【问题描述】:
现在c#中是否有任何简写可以减少以下代码:
var testVar1 = checkObject();
if (testVar1 != null)
{
testVar2 = testVar1;
}
在这种情况下,如果 checkObject() 结果中的 testVar1 不为空,则只想分配 testVar2(testVar2 有一个会触发代码的设置器)。试图思考如何使用空合并的东西,但没有真正解决。
添加到这个 testVar2 上有代码在它的 setter 上触发,所以如果值为 null,不希望 testVar2 被设置为任何值。
public MyObj testVar2
{
get { return _testVar2; }
set
{
_testVar2 = value;
RunSomeCode();
}
}
【问题讨论】:
-
testVar2 = testVar1 ?? testVar2;;意味着它将设置testVar2到testVar1如果它不为空,如果它为空,它将设置testVar2到testVar2。示例:dotnetfiddle.net/hUPYDU -
testVar2 = testVar1 != null ? testVar1 : testVar2;
-
我明白了,如果 testVar1 为 null,但我不希望 testVar2 被设置为任何东西,即使它被设置为自身,它也会命中 setter 方法。
-
现在我看到避免使用二传手是主要目标,还有一个额外的建议。我认为在那之后,我们就没有语法糖了
标签: c# shorthand null-coalescing-operator null-coalescing