如何结合|| 条件语句中的操作符
代替
if (foo == "1" || foo == "5" || foo == "9" ... )
我喜欢把它们组合起来,类似于以下(不起作用):
if (foo == ("1" || "5" || "9" ... ))
那可能吗?
不幸的是,你最好的办法是创build一个扩展方法
public static bool IsOneOf<T>(this T value, params T[] options) { return options.Contains(value); }
你可以像这样使用它:
if (foo.IsOneOf("1", "5", "9")) { ... }
作为通用的,它可以用于任何types(int,string等)。
你不能这样做。 相反,你可以这样做:
string[] validValues = new string[] { "1", "5", "9", "whatever" }; if(validValues.Contains(foo)) { // do something }
一个可能的select是这样的:
switch (foo) { case "1": case "5": case "9": // your code here break; }
另一个可能的select是:
var vals = new string[] { "1", "5", "9" }; if (vals.Contains(foo)) { // your code here }
如果所有选项都只是一个字符,你可以这样做:
if ("159".IndexOf(foo) != -1) { //do something }
这是又一个select:
bool x = new[] { "1", "5", "9" }.Any(a => a == "5"); //x == true bool y = new[] { "1", "5", "9" }.Any(a => a == "8"); //y == false
在这种情况下最好使用.Contains(foo)
,因为lambda的灵活性在这里被浪费了。 如果有一个复杂的expression需要完成,Any将会更有用。
你可以做到这一点,如果这是你可以接受的:
if ( (new string[] {"1","9","5","6" }).Contains(foo)) { }
你可以使用switch
语句:
switch (foo) { case "1": case "5": case "9": // ... break; case "2": case "4": // ... break; }
如果foo
是string,请注意区分大小写。
如果你有多个if条件,你应该总是考虑使用switch语句,因为编译器会尽可能创buildjumptables来提高速度。 你应该看看这里的速度testing。 这里需要注意的是,如果条件数量足够大以涵盖开销,C#编译器也会创build一个HashTable对象。
所以这是一个更好的方法,
switch (foo) { case "1": case "5": case "9": // ... break; case "2": case "4": // ... break; }