在 c# 中,有这样一个运算符来表示引用第一个变量的“AndAlso”

本文关键字:引用 表示 运算符 第一个 变量 AndAlso 一个 | 更新日期: 2023-09-27 18:35:31

我很想知道是否有这样的运算符可以允许以下内容

首行:

if(foo > 1 && foo < 10)

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

if(foo > 1 && < 10)

我希望对自己进行一些了解,了解这些操作员如何在较低级别上工作,解释为什么不将不胜感激。

谢谢

在 c# 中,有这样一个运算符来表示引用第一个变量的“AndAlso”

不,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;
    }
}

但不建议这样做。如果你想走扩展方法路线,一个问题是如何处理>>=<<=的所有组合。

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