2012-05-09 56 views
1

我創建了一個C#中的方法,你可以看到下面接受的方法只有某些字符串在C#

public static IEnumerable<User> QueryTheAD(string filter, string identifier) { 
    if (filter == "ANiceString") { 
    // sexy code here 
    } 
} 

效果很好。然而,VS正確地表明並不是所有的代碼路徑都返回一個值。

那麼,是否因此可能對我來說,指定過濾器只能是其中之一:

  • 「導師」
  • 「年」
  • 「SecondName」
+1

謝謝所有曾經這麼多的幫幫我。真心感謝! _heads back to VS_ –

回答

7

使用一個枚舉或者拋出ArgumentException如果無效的字符串傳遞。

雖然枚舉只映射到數字,但您可以始終將枚舉值映射到字符串,以防因爲某些原因需要字符串名稱。

14

也許你應該使用枚舉而不是字符串? :)

enum filterEnum 
{ 
    Tutor, 
    Year, 
    SecondName 
} 

public static IEnumerable<User> QueryTheAD(filterEnum filter, string identifier) 

享受;)

+2

'enum'不會阻止未將名稱傳遞給方法的值。所以雖然'enum'確實可能更合適,但它並不能解決問題本身。當然是 – dtb

+0

,但它起作用。另一種解決方案是使用自定義類型或其他東西... – animaonline

+0

從來沒有聽說過枚舉。 我真的只是用C#編寫正確的應用程序。 謝謝! –

3

無效參數的正常行爲是拋出ArgumentException。

4

不允許這種類型的編譯時間限制。該方法的實施必須處理所有string值。如果一個不符合該方法的合同,那麼你應該拋出異常

2

如何簡單switch

public static IEnumerable<User> QueryTheAD(string filter, string identifier) { 
    switch (filter) 
    { 
     case "Tutor": 
      //code here 
      break; 

     case "Year": 
      //code here 
      break; 

     case "SecondName": 
      //code here 
      break; 

     default: 
      throw new ArgumentException("filter", "Unacceptable value of filter"); 
    } 
} 
+0

我想知道其他選項是什麼,而不是多個'if'語句謝謝安德烈! –

1

答案取決於該行爲是什麼時候filter一個這三個串。

如果其中的一個要求,你要麼引發ArgumentException:

public static IEnumerable<User> QueryTheAD(string filter, string identifier) 
{ 
    if(filter != "Tutor" || filter != "Year" || filter != "SecondName") throw new ArgumentException ("filter"); 

    // sexy code here 
} 

或使用enum要求所需要的值之一:

public enum LegalValues { Tutor = 1, Year = 2, SecondName = 3 } 

public static IEnumerable<User> QueryTheAD(LegalValues filter, string identifier) 
{ 
    // sexy code here 
}