首页 > 解决方案 > c# if not null then assign value的简写

问题描述

现在 c# 中是否有任何简写可以减少以下代码:

var testVar1 = checkObject();
if (testVar1 != null)
{
      testVar2 = testVar1;
}

在这种情况下,如果 testVar1 从 CheckObject() 结果中不为空,则只想分配 testVar2(testVar2 有一个将触发代码的设置器)。试图思考如何使用空合并的东西,但没有真正解决。

添加到这个 testVar2 的 setter 上有代码可以触发,所以如果值为 null,不希望 testVar2 被设置为任何值。

    public MyObj testVar2
    {
        get { return _testVar2; }
        set
        {
            _testVar2 = value;
            RunSomeCode();                
        }
    }

标签: c#shorthandnull-coalescing-operatornull-coalescing

解决方案


有一对!

三元运算符:

testvar2 = testVar1 != null ? testvar1 : testvar2;

将是完全相同的逻辑。

或者,如评论所述,您可以使用空合并运算符:

testVar2 = testVar1 ?? testVar2

(虽然现在这也被评论了)

或者第三种选择:编写一次方法并按照您的喜好使用它:

public static class CheckIt
{
    public static void SetWhenNotNull(string mightBeNull,ref string notNullable)
    {
        if (mightBeNull != null)
        {
            notNullable = mightBeNull;
        }
    }
}  

并称之为:

CheckIt.SetWhenNotNull(test1, ref test2);

推荐阅读