我可以有这样的if语句吗?如果Test =“test1”或“test2”或“test3”而没有走很长的路?

时间:2010-07-06 17:07:33

标签: c#

我是否必须将if语句设置为

if(Test == "test1" || Test == "test2" || Test == "test3")
{
    //do something
}

有没有办法像

那样
if(Test == "test1":"test2":"test3")

3 个答案:

答案 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))
{
    ...
}