在 Javascript 中,我可以这样做:
var myVar = returnNull() || new MyObject();
在 C# 中,我目前正在这样做:
var myVar = returnObjectOrNull();
if (myVar == null) myVar = new MyObject();
有没有办法在 C# 中缩短它?
在 Javascript 中,我可以这样做:
var myVar = returnNull() || new MyObject();
在 C# 中,我目前正在这样做:
var myVar = returnObjectOrNull();
if (myVar == null) myVar = new MyObject();
有没有办法在 C# 中缩短它?
使用??
运算符
foo ?? new Foo();
或者在你的情况下
var myVar = returnObjectOrNull() ?? new MyObject();
这 ??运算符称为空值合并运算符,用于为可空值类型或引用类型定义默认值。如果操作数不为空,则返回左侧操作数;否则返回正确的操作数。
使用空合并运算符
var myVar = returnObjectOrNull();
myVar = myVar ?? new MyObject();
使用空合并运算符:
var myvar = returnObjectOrNull() ?? new MyObject();
是的,它被称为空合并运算符:
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 方法中只创建了一个对象,而不是??
语句行中的那个。
您可以使用?? Operator (C# Reference)
类似的运算符;
var myVar = returnObjectOrNull() ?? new MyObject();
该
??
运算符称为 null-coalescing 运算符,用于为可空值类型或引用类型定义默认值。如果操作数不为空,则返回左侧操作数;否则返回正确的操作数。