你是不是有遇過這種邏輯需求: if (x == “A” || x == “B” || x == “C” || x == “D” ….),x滿足其中任一即可。當可能選項很多時,程式碼就會又臭又長,此時不免有個念頭,如果可以像SQL寫成WHERE X IN ('A', 'B', 'C', 'D' ...)多好?
我慣用的做法是借用.NET 2.0的System.Collections.Generic的List<string>,其中有個Contains()方法可產生類似效果:
【2009-06-06更新】感謝大估補充,其實Array.IndexOf(Array, string)就可以提供相同的比對功能,可省去動用List<string>的步驟,寫法上更簡潔。我又再次抛磚引玉,賺到了。
【2009-06-07更新】賺翻了,丟了顆小石頭,結果掉出鑽石來!! chicken大給了個絕佳的點子,bool WhereIn(x, "A", "B", "C"),詳見留言區。(註: 再次證明本站的留言比貼文精彩,建議可以長期訂閱哦!)
using System;
using System.Collections.Generic;
public class CSharpLab
{ private static string getTestResult(
List<string> lst, string target)
{ bool test = lst.Contains(target);
string result =
string.Format("[{0}] {1} in ('{2}')!", target, test ? "is" : "is not",
string.Join("','", lst.ToArray())); return result;
}
public static void Test()
{ List<string> lst =
new List<string>("A,B,C,D,E,F".Split(',')); string x = "X";
Console.WriteLine(getTestResult(lst, x));
lst.Add("X"); Console.WriteLine(getTestResult(lst, x));
}
}
[X] is not in ('A','B','C','D','E','F')!
[X] is in ('A','B','C','D','E','F','X')!
很簡單吧! 整篇的關鍵只在lst.Contains()那一列,其餘的部分都是為了舖陳這個梗而灑的花瓣(XD)...