2014-09-22 77 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」的默認編譯版本(我們還不知道它的權威名字)。