你认为怎么样?=在C#操作? [关闭]
-
23-09-2019 - |
题
你认为C#将支持类似?? =操作?
代替此的:
if (list == null)
list = new List<int>();
这可能是可以写:
list ??= new List<int>();
现在,我可以使用(但在我看来没有得到很好的可读性):
list = list ?? new List<int>();
解决方案
我一直想这样的事情。我将其本身更经常用它比??
。
我真正想要的,虽然是运营商的一种形式,可以让你只有非空取消引用的对象。要更换这样:
int count = (list != null)? list.Count : 0
使用是这样的:
int count = list??.Count : 0
这将是非常有用的我引用的长链(糟糕的设计,我知道),但例如:
int count = foo??.bar??.baz??.list??.Count : 0
这是目前不可能与??
,因为你只能说“指定为foo,或者空的替代”,而不是“分配到的属性的FOO的,或者如果空替代。 “
其他提示
我个人认为只有第二膨胀有意义(沿同一行+=
等保持计):
list = list ?? new List<int>();
但说实话我觉得有点不必要。人们通常“搞定” i += 5;
,但往往有空凝聚(??
)的问题。添加一个空凝聚赋值操作符和......嗯,我看不出它在结束很好。
我个人偏爱的原代码:
if(list == null) { list = new List<int>(); }
....
此外 - 考虑:在所有其它+=
,-=
等 - 的右手侧总是评价。在这种情况下,它不会(在某些情况下)。这增加了更多的混乱。我指的是:
i += SomethingCriticalThatMustBeCalled(); // fine - always runs
j ??= SomethingElseCriticalThatMustBeCalled(); // is this run? if j != null?
我发现这里的某个地方开个玩笑计算器是做这样的事情...
private List<string> myList;
public List<string> MyProp
{
get { return myList ?? (myList= new List<string>()); }
}
...你也许能够在代码中使用类似的懒惰EVAL。
我喜欢它 - 它是一个不错的,以表达延迟加载表达简洁的方式。无论它是否被添加到语言又是另一回事完全 - 为的埃里克利珀爱指出,新功能需要显著大量的工作来实现,因此他们必须贡献显著净正的语言才能被列入
除非我看了你的问题错了,运营商确实存在在C#的 http://msdn.microsoft.com/en-us/library/ms173224(VS.80)的.aspx
不隶属于 StackOverflow