2017-08-08 53 views
2

我試圖使用C#7型模式對一個元組類型:值元組類型模式

var lst = new List<object>(); 
lst.Add("foo"); 
lst.Add(("bar","baz")); 

foreach (var item in lst) { 
    switch (item) { 
     case string s: 
      break; 
     case (string, string) t: //Compiler error here 
      break; 
    } 
} 

但是編譯器給了我以下錯誤:

Invalid expression term 'string' A constant value is expected

我該如何解決這個?


N.B.我知道我可以使用:

case ValueTuple<string,string> t: 

但我想知道是否有更好的語法。

回答

3

只需使用case ValueTuple<string, string> t:

當我發佈這個答案時,您剛剛向您的問題添加了相同的解決方案。那麼,你必須堅持使用這個解決方案,直到他們爲case (,):語法添加編譯器支持(不會等待,因爲這是一個邊緣案例)。

1

存在不同類型的模式,這些模式在C#7.0中未實現,但在patterns proposal中進行了跟蹤,包括您描述的遞歸和位置模式。其中一些是後來的7.x版本的候選版本。