2017-03-22 20 views
3

我在想,如果匹配有辦法做這樣的事情在C#7C#7圖案上的繩子

 var test = "aaeag"; 
     switch (test) 
     { 
      case test.StartsWith("a"): 
       break; 
      default: 
       break; 
     } 

可悲的是它看起來並不像它可能。這是正確的還是我做錯了什麼?

回答

5

這可能是用C#7,使用when後衛:

var test = "aaeag"; 
switch (test) 
{ 
    case var s when s.StartsWith("a"): 
     break; 
    default: 
     break; 
} 

你的代碼的版本正在做的是通常被稱爲活動模式。例如通過定義的擴展方法:

public static bool StartsWithPattern(this string str, string matchPattern) => 
    str.StartsWith(matchPattern); 

然後交換機將變成:

var test = "aaeag"; 
switch (test) 
{ 
    case StartsWith("a"): 
     break; 
    default: 
     break; 
} 

如果您希望看到在未來的C#版本的這一功能,那麼請upvote this proposal

+0

@ paulo-morgado,根據提案,活動模式示例中的代碼應該是'case StartsWith(「a」):'。這個想法是編譯器刪除了'Pattern'後綴。 –