7

昨晚我在写一个 if 表达式时有一个想法,有时当你有这样的表达式时,表达式往往很长:

if(x == 1 || x == 2 || x == 33 || x == 4 || x == -5 || x == 61) { ... }

x 可以是枚举、字符串、整数、字符。

我想知道是否有更简单的方法来写这个。例如,我认为 sql 的运算符 'in' 可以缩短表达式:

if(x in (1,2,33,4,-5,61)) { ... }

我知道你不能用'in'写这样的表达式,因为编译器的词法分析器和解析器不会识别它。

也许其他解决方案作为不同类型 x 的扩展方法是解决方案?在即将到来的 .NET 4.0 中,我听到了一些关于参数化方法的信息,这是否应该解决提供给 if 表达式的 n 个参数?

也许您理解我,您对这个问题的良好做法/解决方案有什么想法吗?

/丹尼尔

4

6 回答 6

18

我通常写一个扩展方法如下:

public static bool In<T>(this T source, params T[] list)
{
  if(null==source) throw new ArgumentNullException("source");
  return list.Contains(source);
}

可以这样使用:

if(x.In(1,6,9,11))
{
      // do something....
}
于 2009-11-04T09:42:21.040 回答
13

尝试以下

if ( (new []{1,2,33,4,-5,61}).Any(i => x == i) ) {
  ...
}
于 2009-11-04T09:12:49.600 回答
1
    public static bool In<T>(this T X, params T[] list)
    {
        foreach (var item in list)
        {
            if (X.Equals(item))
                return true;
        }
        return false;
    }
于 2009-11-04T09:17:20.240 回答
0
   string[] possible = new string[3] { 1, 2, 3);

   if (possible.Contains(x)) { ...
于 2009-11-04T09:13:56.363 回答
0
    bool In<T>(T num, params int args)
    {
        return (new List<T>(args)).Contains(num);
    }
于 2009-11-04T09:16:20.163 回答
0

鉴于 x 是一个 int ,您可以编写一个扩展方法,如下所示:

public static bool In(this int i, params int[] values){
    foreach(int v in values) {
        if (i == v) {
            return true;
        }
    }
    return false;
}
于 2009-11-04T09:18:48.670 回答