繁体   English   中英

运算符重载中的C#

[英]C# in operator-overloading

在编写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-expression的n个参数?

也许您了解我,对这个问题有一个好的做法/解决方案的想法吗?

/丹尼尔

我通常将扩展方法编写如下:

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....
}

尝试以下

if ( (new []{1,2,33,4,-5,61}).Any(i => x == i) ) {
  ...
}
    public static bool In<T>(this T X, params T[] list)
    {
        foreach (var item in list)
        {
            if (X.Equals(item))
                return true;
        }
        return false;
    }
   string[] possible = new string[3] { 1, 2, 3);

   if (possible.Contains(x)) { ...
    bool In<T>(T num, params int args)
    {
        return (new List<T>(args)).Contains(num);
    }

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

public static bool In(this int i, params int[] values){
    foreach(int v in values) {
        if (i == v) {
            return true;
        }
    }
    return false;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM