是否为C#设置了比较运算符?

时间:2011-02-25 16:31:15

标签: c# comparison set

我有以下声明:

while ((leftSide.Count-rightSide.Count!=-1)&&(leftSide.Count-rightSide.Count!= 0))
{
     // Do stuff here
}

我很想写这样的东西:

while (leftSide.Count - rightSide.Count ! in [-1, 0])
{
     // Do stuff here
}

但这是非法的语法。我想知道,有什么办法吗?我不知道一些语法?

我想查看一组数字中的计数差异,而不必再次重新包含该语句的整个左侧?

我想我可以这样做:

int x = leftSide.Count-rightSide.Count;
while ((x != -1) && (x != 0))
{
     // Do stuff here
     x = leftSide.Count-rightSide.Count;
}

但我不愿意。

如果没有办法进行“设定”比较,那么知道为什么吗? C#是一种功能齐全的语言,这样的东西似乎很奇怪。

8 个答案:

答案 0 :(得分:8)

使用扩展方法,您可以轻松创建In运算符:

public static class Extensions
{
    public static Boolean In<T>(this T obj, params T[] items)
    {
        return items.Contains(obj);
    }
}

用法:

Int32 i = 10;
i.In(10, 20, 30); // True

答案 1 :(得分:7)

它不需要使用语言,因为它可以很容易地存在于中:

private static readonly int[] ValidValues = { -1, 0 };

...

if (!ValidValues.Contains(leftSide.Count - rightSide.Count))
{
    ...
}

我在这里使用了一个数组,因为它太小......但是你想考虑在大型集合中使用HashSet<int>

答案 2 :(得分:1)

new[]{0,1}.Contains(leftSide.Count - rightSide.Count)

答案 3 :(得分:0)

答案 4 :(得分:0)

您可以使用HashSet(或实施ISet的任何内容)进行集合比较。为了您的目的,这是矫枉过正。

我怀疑使用x&gt; 0会对你的例子起作用。

答案 5 :(得分:0)

如果金额较大,您可以声明List<T>并使用Contains方法:

List<int> values = new List<int> {-1, 0};

if(!values.Contains(x))
  //do stuff

答案 6 :(得分:0)

使用扩展方法:

public static class DoubleInExtension
{
    public static bool IsIn(this double x, double a, double b)
    {
        return x >= a && x <= b;
    }
}

答案 7 :(得分:0)

int[] set = {-1, 0};
while (!set.Contains(leftSide.Count - rightSide.Count))
{
//Do stuff here
}