3

我有这样的功能(foo):我需要比较输入字符串并相应地执行任务。任务是相同的,但仅适用于一组选定的值。对于所有其他值,什么都不做。

function foo(string x)

{
if(x == "abc")
    //do Task1

if(x == "efg")
    //do Task1
if(x == "hij")
    //do Task1
if(x == "lmn")
    //do Task1
}

除了这个,还有其他方法可以做检查吗?或者把OR运营商放在里面if

首选方式是什么?

4

4 回答 4

10

有很多方法可以做到这一点。一种如下:

var target = new HashSet<string>{ "abc", "efg", "lmn" };
if (target.Contains(x)) {
    ...
}

在 max [我的字符串列表] 可以增长到 50 个字符串,这是一种罕见的可能性。

然后你应该在你的课堂上做target一个static readonly,像这样:

private static readonly StringTargets = new HashSet<string>{ "abc", "efg", "lmn" };

这样做将确保该集合只创建一次,并且不会在每次执行通过使用它的方法时重新创建。

于 2013-08-05T13:37:05.760 回答
7

像这样做

function foo(string x)
{
  switch(x)
  {
      case "abc":
      case "efg":
      case "hij":
      case "lmn":
        {
          //do task 1
          break;
        }
      default:
        break;
  }
}

或者你可以这样做

if(x == "abc"||x == "efg"||x == "hij"||x == "lmn")
   //do Task1
于 2013-08-05T13:36:47.637 回答
0

一种方法是制作一个可接受字符串的数组,然后查看该数组是否包含 x

function foo(string x)

{


     string[] strings = new string[] {"abc", "efg", "hij", "lmn"};

     if (strings.contains(x)){
        //do task 1
     }
}
于 2013-08-05T13:38:34.373 回答
-1

您可以使用具有默认值的 switch 语句来捕获任何不匹配的内容

http://blogs.msdn.com/b/brada/archive/2003/08/14/50227.aspx

function foo(string x) {

    switch(x) {

     case "abc":
      //do task 1
     break;

     case "efg":
      //do task 2
     break;

     default:
      //all other cases
     break;
    }
}
于 2013-08-05T13:39:47.420 回答