我是否必须将if语句设置为
if(Test == "test1" || Test == "test2" || Test == "test3")
{
//do something
}
有没有办法像
那样if(Test == "test1":"test2":"test3")
答案 0 :(得分:17)
是
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"))
为获得最佳性能,您可以进行带有两个或三个参数但不使用数组的重载。
答案 1 :(得分:17)
您编写的代码没有任何问题。这很容易理解,但你可以试试:
switch (Test)
{
case "test1":
case "test2":
case "test3":
//your code here
break;
default :
//else code
break;
}
正如你所看到的,这比你原来的if语句要冗长得多,而且不是很明显它的用途,但它是一种答案。它将编译为非常有效的中间代码。实际上,如果要相信this post,那么它可以编译为比帖子中的if语句更有效的代码,具体取决于编译器是否将这些值视为“相邻”。
答案 2 :(得分:5)
您可以采取以下措施来缩短您的陈述:
if (new[] { "test1", "test2", "test2" }.Contains(Test))
{
...
}