C# 我能有这样的if语句吗?如果测试=";测试1“;或;测试2“;或;测试3“;不用走很长的路?

C# 我能有这样的if语句吗?如果测试=";测试1“;或;测试2“;或;测试3“;不用走很长的路?,c#,C#,我必须将if语句设置为 if(Test == "test1" || Test == "test2" || Test == "test3") { //do something } 有没有一种方法可以像 if(Test == "test1":"test2":"test3") 对 您甚至可以编写一个扩展方法: public static bool IsAnyOf<T>(this T obj, params T[] values) { return values.Con

我必须将if语句设置为

if(Test == "test1" || Test == "test2" || Test == "test3")
{
    //do something
}
有没有一种方法可以像

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

您甚至可以编写一个扩展方法:

public static bool IsAnyOf<T>(this T obj, params T[] values) { 
    return values.Contains(T); 
}

if (Test.IsAnyOf("test1", "test2", "test3"))
public static bool IsAnyOf(这个T对象,参数T[]值){
返回值。包含(T);
}
if(Test.IsAnyOf(“test1”、“test2”、“test3”))

为了获得最佳性能,您可以使用两个或三个参数进行重载,而不使用数组。

您可以做些什么来稍微缩短语句:

if (new[] { "test1", "test2", "test2" }.Contains(Test))
{
    ...
}

您编写的代码没有问题。这很容易理解,但您可以尝试:

switch (Test)
{
   case "test1":
   case "test2":
   case "test3":
      //your code here
      break;
   default :
      //else code
      break;
 }

正如您所看到的,这比您最初的if语句要详细得多,并且不清楚它的用途,但这是一个类似的答案。它将编译成相当高效的中间代码。事实上,如果可以相信,那么它可以编译成比您文章中的if语句更有效的代码,这取决于编译器是否认为这些值是“相邻的”。

+1因为不使用
包含
。。谈论教坏习惯;嘘,“坏习惯”-怎么会这样
Regex.Match(Test,“Test[1-3]”)
将是一个坏习惯:)@Tim Robinson:我的意思是对基本控制流使用
Contains
(特别是与一次性分配相结合)是完全的过度使用。对于这一点来说,它是。取决于实际值是什么(可能不是“test1”、“test2”、“test3”)以及OP希望在将来添加什么。数组可以是
私有静态只读
。在这种情况下,您应该编辑您的问题或更改您接受的答案。否则,遇到这种情况的用户会错误地认为接受的答案对他们来说是更好的答案。您需要在方法中使用“this T obj”,使其在技术上成为一种扩展方法(typo?)。这将起作用。然而,我怀疑这并不能满足他所说的更容易的要求。
switch (Test)
{
   case "test1":
   case "test2":
   case "test3":
      //your code here
      break;
   default :
      //else code
      break;
 }