【发布时间】:2013-06-06 14:02:49
【问题描述】:
在 Javascript 中我可以这样做:
var myVar = returnNull() || new MyObject();
在 C# 中,我目前正在这样做:
var myVar = returnObjectOrNull();
if (myVar == null) myVar = new MyObject();
有没有办法在 C# 中缩短它?
【问题讨论】:
标签: c#
在 Javascript 中我可以这样做:
var myVar = returnNull() || new MyObject();
在 C# 中,我目前正在这样做:
var myVar = returnObjectOrNull();
if (myVar == null) myVar = new MyObject();
有没有办法在 C# 中缩短它?
【问题讨论】:
标签: c#
使用?? 运算符
foo ?? new Foo();
或者在你的情况下
var myVar = returnObjectOrNull() ?? new MyObject();
??运算符称为空合并运算符,用于 为可空值类型或引用类型定义默认值。它 如果操作数不为空,则返回左侧操作数;否则它 返回右操作数。
【讨论】:
使用空合并运算符
var myVar = returnObjectOrNull();
myVar = myVar ?? new MyObject();
【讨论】:
var myvar = returnObjectOrNull() ?? new MyObject();
【讨论】:
是的,它叫做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 方法中只创建了一个对象,而不是 ?? 语句行中的那个。
【讨论】:
你可以使用?? Operator (C# Reference)这样的操作符;
var myVar = returnObjectOrNull() ?? new MyObject();
??运算符称为空合并运算符,用于 为可空值类型或引用类型定义默认值。它 如果操作数不为空,则返回左侧操作数;否则它 返回右操作数。
【讨论】: