2014-09-22 45 views
4

我记得我在某处读过这篇文章,但现在无法在Google搜索结果中找到它。可为空的运算符。?

最新的C#(VS2013)是否支持这样的操作符?

SomeObject.?SomeMember = SomeValue; 

这应该分配给SomeValueSomeObject.SomeMember如果SomeObject不为空。

N.B:我知道我们可以通过HasValue和其他方式做到这一点。我只是在问新的运营商。

+0

我基本上试图将控件绑定到它(ASP.NET WebForms模型绑定)。像这样:'Text ='<%#Item.Manufacturer?.Name%>' – dotNET 2014-09-22 09:02:58

+2

@Jehof:您的意思是C#6.0 – 2014-09-22 09:03:00

+1

以下是关于Codeplex上此功能的原始详细讨论:https://roslyn.codeplex.com/讨论/ 540883 – 2014-09-22 09:03:55

回答

5

那么它与Nullable types.It是null propagation operator无关,并将适用于每个类型可以为空,而不仅仅是Nullable<T>,引用类型以及。

最新的C#(VS2013)是否支持任何此类运算符?

如果你正在使用VS 2013,或Visual Studio你可以安装罗斯林最终用户预览14 CTP 3

+0

但是,即使C#6支持'SomeObject.?SomeMember = SomeValue'?空传播运算符是l值表达式的一部分(或者实际名称是什么)。 – Dirk 2014-09-22 09:11:04

+0

感谢您的快速和全面的答案。虽然我喜欢@Dirk的评论/问题。 – dotNET 2014-09-22 09:16:07

+0

@Dirk我认为同样的事情,那么表达式可以返回null,而null =某些东西不是一个有效的表达式。但谁知道.. – 2014-09-22 09:16:14

1

它是Roslyn编译器可用,这就是所谓Null-propagation - 它已经实现。默认情况下,Roslyn编译器将在VS 14中可用。

0

不,Visual Studio 2013不支持这样的操作符。至少不是开箱即用。

如果要使用null propagation operator或任何其他C# 6 feature,则必须安装并使用Roslyn的CTP。尽管Roslyn将是Visual Studio“14”的默认编译版本(我们还不知道它的权威名字)。

相关问题