если операторы соответствуют нескольким значениям - PullRequest
71 голосов
/ 11 октября 2010

Есть ли более простой способ написать это, если заявление?

if (value==1 || value==2)

Например ... в SQL вы можете сказать where value in (1,2) вместо where value=1 or value=2.

Я ищу что-то, что могло бы работать с любым базовым типом ... string, int и т. Д.

Ответы [ 14 ]

1 голос
/ 11 октября 2010

Проще субъективно, но, может быть, оператор switch будет проще?Вам не нужно повторять переменную, поэтому в строке может поместиться больше значений, и строка с множеством сравнений будет более разборчивой, чем аналог, использующий оператор if.

1 голос
/ 11 октября 2010

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

public static class ObjectExtension
{
    public static bool In(this object obj, params object[] objects)
    {
        if (objects == null || obj == null)
            return false;
        object found = objects.FirstOrDefault(o => o.GetType().Equals(obj.GetType()) && o.Equals(obj));
        return (found != null);
    }
}

Теперь вы можете сделать это:

string role= "Admin";
if (role.In("Admin", "Director"))
{ 
    ...
} 
0 голосов
/ 27 апреля 2017

У меня была та же проблема, но я решил ее с помощью оператора switch switch (значение, которое вы включаете) {case 1: код, который вы хотите получить;случай 2: код, который вы хотите получить;по умолчанию: вернуть значение}

0 голосов
/ 11 октября 2010
public static bool EqualsAny<T>(IEquatable<T> value, params T[] possibleMatches) {
    foreach (T t in possibleMatches) {
        if (value.Equals(t))
            return true;
    }
    return false;
}
public static bool EqualsAny<T>(IEquatable<T> value, IEnumerable<T> possibleMatches) {
    foreach (T t in possibleMatches) {
        if (value.Equals(t))
            return true;
    }
    return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...