如果为null,创建新实例的简写?

时间:2013-06-06 14:02:49

标签: c#

在Javascript中,我可以这样做:

var myVar = returnNull() || new MyObject();

在C#中我当前正在这样做:

var myVar = returnObjectOrNull();

if (myVar == null) myVar = new MyObject();

有没有办法在C#中缩短它?

5 个答案:

答案 0 :(得分:22)

使用??运算符

foo ?? new Foo();

或者在你的情况下

var myVar = returnObjectOrNull() ?? new MyObject();
  

?? operator被称为null-coalescing运算符并且习惯于   为可空值类型或引用类型定义默认值。它   如果操作数不为null,则返回左侧操作数;否则它   返回正确的操作数。

答案 1 :(得分:2)

使用null-coalescing operator

var myvar = returnObjectOrNull() ?? new MyObject();

答案 2 :(得分:2)

使用空合并运算符

var myVar = returnObjectOrNull();

myVar = myVar ?? new MyObject();

答案 3 :(得分:1)

是的,它被称为null coalescing operator

var myVar = returnObjectOrNull() ?? new MyObject();

请注意,如果左侧不为null,则此运算符不会评估右侧,这意味着除非必须,否则上面的代码行不会创建新的MyObject。

以下是一个示例LINQPad程序来演示:

void Main()
{
    var myVar = returnObjectOrNull() ?? new MyObject();
}

public MyObject returnObjectOrNull()
{
    return new MyObject();
}

public class MyObject
{
    public MyObject()
    {
        Debug.WriteLine("MyObject created");
    }
}

这将输出“MyObject created”一次,这意味着在returnObjectOrNull方法中只创建了一个对象,而不是??语句行中的对象。

答案 4 :(得分:0)

您可以使用?? Operator (C# Reference)运算符;

var myVar = returnObjectOrNull() ?? new MyObject();
  

??运算符称为null-coalescing运算符,用于   为可空值类型或引用类型定义默认值。它   如果操作数不为null,则返回左侧操作数;否则它   返回正确的操作数。