我是不是要設置我的if語句作爲我可以有這樣的if語句嗎?如果Test =「test1」或「test2」或「test3」沒有很長的路要走?
if(Test == "test1" || Test == "test2" || Test == "test3")
{
//do something
}
有沒有辦法有像
if(Test == "test1":"test2":"test3")
我是不是要設置我的if語句作爲我可以有這樣的if語句嗎?如果Test =「test1」或「test2」或「test3」沒有很長的路要走?
if(Test == "test1" || Test == "test2" || Test == "test3")
{
//do something
}
有沒有辦法有像
if(Test == "test1":"test2":"test3")
是。
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"))
爲了獲得最佳性能,你就可以說需要兩個或三個參數,不要用數組重載。
你可以做什麼,以縮短你的說法有點如下:
if (new[] { "test1", "test2", "test2" }.Contains(Test))
{
...
}
沒有什麼不對的,你所編寫的代碼。這是很容易理解的,但你可以嘗試:
switch (Test)
{
case "test1":
case "test2":
case "test3":
//your code here
break;
default :
//else code
break;
}
正如你所看到的,這大大超過原來的if語句冗長,沒有立即明顯它是什麼,但它是各種各樣的答案。它會編譯成相當有效的中間代碼。實際上,如果this post被認爲是可信的,那麼它可以編譯爲比帖子中的if語句更高效的代碼,這取決於編譯器是否認爲這些值是「相鄰」的。
+1不使用「Contains」..談論壞習慣的教學;嘖。 – 2010-07-06 17:12:34
「壞習慣」 - 怎麼樣? 'Regex.Match(Test,「test [1-3]」)'會是一個壞習慣:) – 2010-07-06 17:27:01
@Tim Robinson:我的意思是使用'Contains'(特別是結合一次性分配)來實現基本控制流總是過度殺傷。 – 2010-07-06 17:43:17
你需要一個「this T obj」來使它成爲一個擴展方法(typo?) – 2010-07-08 12:10:22
技術上真的......這將起作用。不過,我懷疑這不會滿足他不那麼容易的要求。 – Beska 2010-07-13 13:41:44