2010-07-06 49 views

回答

17

是。

if (new [] { "test1", "test2", "test3" }.Contains(Test)) 

你甚至可以編寫一個擴展方法:

public static bool IsAnyOf<T>(this T obj, params T[] values) { 
    return values.Contains(T); 
} 

if (Test.IsAnyOf("test1", "test2", "test3")) 

爲了獲得最佳性能,你就可以說需要兩個或三個參數,不要用數組重載。

+1

你需要一個「this T obj」來使它成爲一個擴展方法(typo?) – 2010-07-08 12:10:22

+1

技術上真的......這將起作用。不過,我懷疑這不會滿足他不那麼容易的要求。 – Beska 2010-07-13 13:41:44

5

你可以做什麼,以縮短你的說法有點如下:

if (new[] { "test1", "test2", "test2" }.Contains(Test)) 
{ 
    ... 
} 
17

沒有什麼不對的,你所編寫的代碼。這是很容易理解的,但你可以嘗試:

switch (Test) 
{ 
    case "test1": 
    case "test2": 
    case "test3": 
     //your code here 
     break; 
    default : 
     //else code 
     break; 
} 

正如你所看到的,這大大超過原來的if語句冗長,沒有立即明顯它是什麼,但它是各種各樣的答案。它會編譯成相當有效的中間代碼。實際上,如果this post被認爲是可信的,那麼它可以編譯爲比帖子中的if語句更高效的代碼,這取決於編譯器是否認爲這些值是「相鄰」的。

+4

+1不使用「Contains」..談論壞習慣的教學;嘖。 – 2010-07-06 17:12:34

+1

「壞習慣」 - 怎麼樣? 'Regex.Match(Test,「test [1-3]」)'會是一個壞習慣:) – 2010-07-06 17:27:01

+0

@Tim Robinson:我的意思是使用'Contains'(特別是結合一次性分配)來實現基本控制流總是過度殺傷。 – 2010-07-06 17:43:17