在Javascript中,我可以这样做:
var myVar = returnNull() || new MyObject();
在C#中我当前正在这样做:
var myVar = returnObjectOrNull();
if (myVar == null) myVar = new MyObject();
有没有办法在C#中缩短它?
答案 0 :(得分:22)
使用??
运算符
foo ?? new Foo();
或者在你的情况下
var myVar = returnObjectOrNull() ?? new MyObject();
?? operator被称为null-coalescing运算符并且习惯于 为可空值类型或引用类型定义默认值。它 如果操作数不为null,则返回左侧操作数;否则它 返回正确的操作数。
答案 1 :(得分:2)
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,则返回左侧操作数;否则它 返回正确的操作数。