代替
if (foo == "1" || foo == "5" || foo == "9" ... )
Run Code Online (Sandbox Code Playgroud)
我喜欢将它们组合成以下(不起作用):
if (foo == ("1" || "5" || "9" ... ))
Run Code Online (Sandbox Code Playgroud)
那可能吗?
Tre*_*ley 169
不幸的是,最好的办法是创建一个扩展方法
public static bool IsOneOf<T>(this T value, params T[] options)
{
return options.Contains(value);
}
Run Code Online (Sandbox Code Playgroud)
你可以像这样使用它:
if (foo.IsOneOf("1", "5", "9"))
{
...
}
Run Code Online (Sandbox Code Playgroud)
它是通用的,可以用于任何类型(int,string等).
Zbi*_*iew 37
你不能这样做.相反,你可以这样做:
string[] validValues = new string[] { "1", "5", "9", "whatever" };
if(validValues.Contains(foo))
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
Mik*_*oud 25
一种可能的选择是:
switch (foo)
{
case "1":
case "5":
case "9":
// your code here
break;
}
Run Code Online (Sandbox Code Playgroud)
另一种可能的选择是:
var vals = new string[] { "1", "5", "9" };
if (vals.Contains(foo))
{
// your code here
}
Run Code Online (Sandbox Code Playgroud)
jse*_*ano 23
如果所有选项都只是一个字符,您可以这样做:
if ("159".IndexOf(foo) != -1)
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
Gra*_*ray 18
这是另一种选择:
bool x = new[] { "1", "5", "9" }.Any(a => a == "5"); //x == true
bool y = new[] { "1", "5", "9" }.Any(a => a == "8"); //y == false
Run Code Online (Sandbox Code Playgroud)
.Contains(foo)
在这种情况下最好使用,因为lambda的灵活性在这里被浪费了.如果有一个复杂的表达需要完成,Any会更有用.
Ica*_*rus 13
你可以这样做,如果这是你可以接受的:
if ( (new string[] {"1","9","5","6" }).Contains(foo))
{
}
Run Code Online (Sandbox Code Playgroud)
您可以使用以下switch
声明:
switch (foo) {
case "1":
case "5":
case "9":
// ...
break;
case "2":
case "4":
// ...
break;
}
Run Code Online (Sandbox Code Playgroud)
如果foo
是字符串,请注意区分大小写.
如果你有多个if条件,你应该总是考虑使用switch语句,因为编译器会尽可能地创建Jumptables以提高速度.你应该看一下速度测试.这里要注意的是,如果条件的数量足以覆盖开销,C#编译器也将创建一个HashTable对象.
所以这是一个更好的方法,
switch (foo) {
case "1":
case "5":
case "9":
// ...
break;
case "2":
case "4":
// ...
break;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2456 次 |
最近记录: |