C#在运算符重载中

Dan*_*son 7 c# linq operator-overloading synonym

在写一个if-expression时我刚才有了一个想法,有时当你有这样的表达式时,表达式往往很长:

if(x == 1 || x == 2 || x == 33 || x == 4 || x == -5 || x == 61) { ... }
Run Code Online (Sandbox Code Playgroud)

x可以是枚举,字符串,整数,字符,你得到的图片.

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

if(x in (1,2,33,4,-5,61)) { ... }
Run Code Online (Sandbox Code Playgroud)

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

也许其他解决方案作为不同类型x的扩展方法是解决方案?在即将推出的.NET 4.0中,我听说过参数化方法,应该解决提供给if-expression的n个参数吗?

也许你理解我,你对这个问题有一个好的实践/解决方案吗?

/丹尼尔

Win*_*ith 18

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

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

哪个可以这样使用:

if(x.In(1,6,9,11))
{
      // do something....
}
Run Code Online (Sandbox Code Playgroud)


Jar*_*Par 13

请尝试以下方法

if ( (new []{1,2,33,4,-5,61}).Any(i => x == i) ) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

  • 我会使用`new [] {1,2,33,4,-5,61}).包含(x)`,Contains通常用于确定一个序列是否包含一个元素,因此在表达intent时更明确, Any()更通用,即使您可以通过使用简单的相等性检查使其像包含一样 (7认同)
  • 使用类型推断,您甚至可以跳过`int`(我认为). (3认同)