2016-11-27 41 views
15

我使用Visual Studio 2017年的RC和我已經安裝了System.ValueTuple封裝實現新的C#7.0元組的用法,但我可以「T使其在這種特殊情況下工作:「如果(對象是(字符串,彩色))」 C#7.0元組的使用不工作

正如你可以看到,第一種方法沒有任何紅色squigglies,它就可以工作。但是,試圖做o is (string, Color)失敗,不相關的錯誤:

可以在新的元組無法以這種方式使用嗎?或者它只是包的當前狀態?我已經更新到最新版本btw,目前是4.3.0。我讀過this MSDN post,但沒有找到任何此類用法。

+2

nuget包僅提供所需的類型,它不提供處理此操作的編譯器部分,因此雖然Nuget包需要使用元組,但它沒有方位關於您遇到的錯誤消息。 –

+11

爲了將來的參考,如果您將代碼和錯誤消息作爲文本發佈,而不是作爲屏幕截圖,將會更好,這使得像我這樣的其他人可以更輕鬆地嘗試代碼並分析結果。 –

+0

出於好奇:「o是Tuple 」的工作嗎? – Dyrborg

回答

7

某些模式匹配功能已從C#7版本中刪除。這包括元組的模式匹配。這被拉出並放入未來的分支。 (https://github.com/dotnet/roslyn/issues/10866

這意味着,更先進的種模式匹配的,由書籤交易海報wreckedadvent有效解釋的,將不會在C#7可用,包括:

  • 遞歸模式的形式,如位置模式(例如,p是人( 「米奇」,*),屬性模式(例如,p是人{姓是 「米奇」}),元組模式,通配符*等

來源:https://www.infoq.com/news/2016/05/csharp7-pattern-matching-removed

更新:類型測試(int, int)可以解釋爲一個元組模式。例如,如果你想做一個類型測試並將結果綁定到一個變量。所以類型測試涉及到元組模式。例如(int x, int y)可以是一個類型測試或一個元組模式。請參閱github上的模式匹配討論:https://github.com/dotnet/roslyn/issues/11744

+1

我不明白爲什麼模式匹配刪除也刪除了'o是Type'的某些情況,其中'Type'在這種情況下是一個元組。它看起來像編譯器試圖很難掩飾'(T1,T2)'實際上只是'ValueType '的事實,並且在某些情況下僞造成員名稱的一些屬性,然後對於'is'運算符支持只是取消。然後,我還沒有深入閱讀C#7文檔或實現,但對於我來說這個特定部分與更高級的模式匹配有關,這似乎很奇怪。 –

+0

特別是因爲'o是ValueType <字符串,Color>'** does **工作。 –

+0

我不知道實現細節,但我認爲你正在討論使用星號符號進行模式匹配,它看起來像一個單獨的功能,應該對這個更常見的功能沒有影響。 – user1306322

相關問題