代替
if (foo == "1" || foo == "5" || foo == "9" ... )
我喜欢将它们组合起来类似于以下内容(这不起作用):
if (foo == ("1" || "5" || "9" ... ))
那可能吗?
不幸的是,你最好的选择是创建一个扩展方法
public static bool IsOneOf<T>(this T value, params T[] options)
{
return options.Contains(value);
}
你可以像这样使用它:
if (foo.IsOneOf("1", "5", "9"))
{
...
}
作为泛型,它可以用于任何类型(int、string 等)。
你不能这样做。相反,您可以这样做:
string[] validValues = new string[] { "1", "5", "9", "whatever" };
if(validValues.Contains(foo))
{
// do something
}
一种可能的选择是:
switch (foo)
{
case "1":
case "5":
case "9":
// your code here
break;
}
另一种可能的选择是:
var vals = new string[] { "1", "5", "9" };
if (vals.Contains(foo))
{
// your code here
}
如果所有选项都只是一个字符,您可以这样做:
if ("159".IndexOf(foo) != -1)
{
//do something
}
这是另一种选择:
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 的灵活性在这里被浪费了。如果有一个复杂的表达式需要完成,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
是字符串,请注意区分大小写。
如果您有多个 if 条件,则应始终考虑使用 switch 语句,因为编译器将尽可能创建Jumptables以提高速度。您应该在这里查看速度测试。这里要注意的是,如果条件的数量足以覆盖开销,C# 编译器也会创建一个 HashTable 对象。
所以这是一个更好的方法,
switch (foo) {
case "1":
case "5":
case "9":
// ...
break;
case "2":
case "4":
// ...
break;
}