5

我很想知道是否有这样的运营商可以进行以下操作

初始行:

if(foo > 1 && foo < 10)

期望行:(变量重复假设?)

if(foo > 1 && < 10)

我希望对自己进行一些关于这些操作员如何在较低级别工作的教育,解释为什么不这样做将不胜感激。

谢谢,

4

2 回答 2

2

不,C# 中没有这样的运算符。您将不得不重复要比较的变量或表达式。

我不知道 C# 中不存在这种运算符的官方原因,但这里有一些想法:

  1. 没有其他语言(我所知道的)有一个,因此它可能不是那么有用
  2. 所有功能都以 -100 分开始,并且需要有充分的理由说明为什么需要将其提高到实际实现所需的阈值以上,并且还必须证明在其他功能之前或代替其他功能之前这样做是合理的。由于无论如何编写表达式都很容易,我怀疑它是否符合所有这些标准。

可以(尽管我认为这不是一个好主意)创建一个扩展方法:

void Main()
{
    int foo = 5;
    if (foo.Between(1, 10))
        Debug.WriteLine("> 1 and < 10");
    else
        Debug.WriteLine("?");
}

public static class Extensions
{
    public static bool Between<T>(this T value, T lowNotIncluded, T highNotIncluded)
        where T : struct, IComparable<T>
    {
        return value.CompareTo(lowNotIncluded) > 0 && value.CompareTo(highNotIncluded) < 0;
    }
}

但不建议这样做。如果您想采用扩展方法路线,要提出的一个问题是如何处理>>=<和的所有组合<=

于 2013-10-16T10:33:00.737 回答
2

这种类型的运算符在 C# 中不存在。但无论如何我都不会使用它,因为您的代码的可读性和意图不是很清楚。相反,我会使用这样的扩展方法:

// using extension method
int number = 15;
if (number.IsBetween(0, 12))
{
   ...
}

// definition of extension method
public static bool IsBetween(this int num, int lower, int upper, bool inclusive = false)
{
    return inclusive
        ? lower <= num && num <= upper
        : lower < num && num < upper;
}
于 2013-10-16T10:57:54.837 回答