Установлена ​​ли операция сравнения для C #? - PullRequest
1 голос
/ 25 февраля 2011

У меня есть следующее выражение while:

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 ]

8 голосов
/ 25 февраля 2011

Используя методы расширения, вы можете легко создать оператор 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
7 голосов
/ 25 февраля 2011

Он не обязательно должен быть на языке , потому что он легко может быть в библиотеке :

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

...

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

Я использовал здесь массив, потому что он такой маленький ... но вы могли бы рассмотреть возможность использования HashSet<int> для большой коллекции.

1 голос
/ 25 февраля 2011
new[]{0,1}.Contains(leftSide.Count - rightSide.Count)
0 голосов
/ 25 февраля 2011
int[] set = {-1, 0};
while (!set.Contains(leftSide.Count - rightSide.Count))
{
//Do stuff here
}
0 голосов
/ 25 февраля 2011

Используйте методы расширения:

public static class DoubleInExtension
{
    public static bool IsIn(this double x, double a, double b)
    {
        return x >= a && x <= b;
    }
}
0 голосов
/ 25 февраля 2011

Для больших сумм вы можете объявить List<T> и использовать метод Contains:

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

if(!values.Contains(x))
  //do stuff
0 голосов
/ 25 февраля 2011

Вы можете использовать HashSet (или что-либо, реализующее ISet) для сравнения множеств Для ваших целей это излишне.

Я подозреваю, что использование x> 0 подойдет для вашего примера.

0 голосов
/ 25 февраля 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...