2010-05-11 30 views
2

是否有可能以某種方式將多個變量與if語句中的一個常量進行比較?這將是如果不是C#多重比較可能嗎?

if (col.Name != "Organization" && col.Name != "Contacts" && col.Name != "Orders") { } 

非常有幫助,我可以只說

if (col.Name != "Organization" || "Contacts" || "Orders") { } 

而且我知道我可以使用一個列表,但在某些情況下,我不想...謝謝!

回答

5

如果你只是在尋找一個快捷方式,你可能不會得到太多。 ChaosPandion提到了switch語句,這裏使用了一個數組。

if (new string[] { "Bar", "Baz", "Blah" }.Contains(foo)) 
{ 
    // do something 
} 
+0

我不覺得你通過交換機或if語句獲得了很多。 – ChaosPandion 2010-05-11 02:41:26

+0

更容易斷言此代碼作爲人類讀者正在做什麼,並驗證它與原始問題相比是否正確。 (沒有明顯的錯誤vs顯然沒有錯誤) – earlNameless 2010-05-11 02:43:56

+0

我喜歡這個。在功能上當然它沒有獲得任何東西,ChaosPandion,但就我個人喜歡的可讀性和乾淨的代碼而言。當然,如果語言內置了某些東西,而不是那麼瘋狂,但它仍然是一個很好的解決方案。謝謝! – 2010-05-11 02:45:34

5

switch語句大概和你一樣好。

switch (col.Name) 
{ 
    case "Organization": 
    case "Contacts": 
    case "Orders": 
     break; 
    default: 
     break; 
} 
+0

啊。知道這一點。但重點是減少不必要的代碼。不知道是否有與Linq或東西的方式 – 2010-05-11 02:36:29

+0

你可以在一個回合的方式使用「Linq」。爲了實現Linq,他們需要添加擴展方法。你可以使用它來爲字符串添加方法,從而使你的代碼更加簡潔。 – John 2010-05-11 02:46:45

+0

效率最高的是最詳細的。 這種情況證明是多久? – harpo 2010-05-11 03:04:25

1

您還可以將擴展方法添加到字符串類,以使您的比較不那麼冗長。我會選擇安東尼提供的解決方案,並將其放在名爲EqualsAny或其他類似的擴展方法中。

1

我第二次約翰對擴展方法的評論。我會做這樣的事情:

public static class StringExtensions 
{ 
    public static bool In(this string input, params string[] test) 
    { 
     foreach (var item in test) 
      if (item.CompareTo(input) == 0) 
       return true; 
     return false; 
    } 
} 

然後你可以這樣調用:

 string hi = "foo"; 
     if (hi.In("foo", "bar")) { 
      // Do stuff 
     } 
+0

請注意,您也可以將此擴展爲對象擴展 - 只需將CompareTo語句更改爲嚴格== – 2010-05-11 03:01:50

+0

通過調用'Array.IndexOf'將該代碼切成兩半。 – 2010-05-11 03:04:06

+0

你可以通過使用'return test.Contains(input);'或'return test.Any(item => item == input);'而不是foreach循環來簡化內部。 – 2010-05-11 03:04:33