9

在 Javascript 中,我可以这样做:

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

在 C# 中,我目前正在这样做:

var myVar = returnObjectOrNull();

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

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

4

5 回答 5

28

使用??运算符

foo ?? new Foo();

或者在你的情况下

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

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

于 2013-06-06T14:03:54.090 回答
4

使用空合并运算符

var myVar = returnObjectOrNull();

myVar = myVar ?? new MyObject();
于 2013-06-06T14:04:22.760 回答
3

使用空合并运算符

var myvar = returnObjectOrNull() ?? new MyObject();
于 2013-06-06T14:04:16.180 回答
2

是的,它被称为空合并运算符

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

请注意,如果左侧不为空,则此运算符不会计算右侧,这意味着上面的代码行不会创建新的 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 方法中只创建了一个对象,而不是??语句行中的那个。

于 2013-06-06T14:04:25.037 回答
1

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

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

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

于 2013-06-06T14:04:47.163 回答