有没有以下...
SomeType _someProperty;
public SomeType SomeProperty
{
get
{
if (_someProperty == null)
_someProperty = new SomeType();
return _someProperty;
}
}
...具有与以下相同的功能?
SomeType _someProperty;
public SomeType SomeProperty
{
get { return _someProperty ?? (_someProperty = new SomeType()); }
}
根据 ReSharper 的说法,他们确实这样做了。如果是这样,有人可以解释第二个块的语法吗?
最佳答案
是的,它们是相同的功能。??
是 null coalescing operator 。如果不为空,则运算符返回运算符之前的值,如果前面的值为空,则返回运算符之后的值。
在这种情况下,通过将表达式的第二部分包装在 params 中,如果 _requiredFieldValidator
为空,则在返回它之前将一个新对象分配给 __requiredFieldValidator
支持字段。
如果没有括号,则在返回之前不会赋值,这会导致以下编译错误:
括号保证正确计算赋值表达式。
关于c# - ReSharper 想要 "Optimize"我的代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32596029/