Как объединить несколько результатов метода bool в один результат, используя && и ||? - PullRequest
2 голосов
/ 06 января 2012

образец:

static void Main(string[] args)
{
    bool result =
        IsGreaterThanTen(1) &&
        IsGreaterThanTen(5) &&
        IsGreaterThanTen(10) ||
        IsGreaterThanTen(20);
}

static bool IsGreaterThanTen(int value)
{
    return value > 10;
}

Мне нужно многократно динамически вызывать метод IsGreaterThanTen и комбинировать их с && или || , как и в этом примере


Возможно, у меня есть массив

int[] array = new int[]{ 1, 3, 5, 7, 9, 11, 13, 15, 17, 19.....};

, и я буду вызывать IsGreaterThanTen метод для каждого элемента массива
и объединить с && или || , чтобы получить bool результат.

может выглядеть так:

bool result = 
    IsGreaterThanTen(1) &&
    IsGreaterThanTen(3) ||
    IsGreaterThanTen(5) &&
    IsGreaterThanTen(7) ||
    IsGreaterThanTen(9) &&
    IsGreaterThanTen(11).............. 

Я могу динамически комбинировать их с && или || оператором
, и я просто хочу узнать результат
Как это сделать?

Обновление: Я хочу объединить их с || или && в соответствии с настройками пользователя.

Ответы [ 5 ]

3 голосов
/ 06 января 2012
var array = new int[]{ 1, 3, 5, 7, 9, 11, 13, 15, 17, 19};

var result = IsGreaterThanTen(array[0]);
for (int i = 1; i < array.Length; i++)
{
    var number = array[i];
    if (number % 2 == 0)
    {
        result = result && IsGreaterThanTen(number);
    }
    else
    {
        result = result || IsGreaterThanTen(number);
    }
}

return result;
2 голосов
/ 06 января 2012

Вопрос все еще неопределенный, но я думаю, что вы ищете, чтобы получить && или ||для всего набора.Вы можете сделать это просто с помощью ярлыка.(непроверенный код, у меня нет среды выполнения C #, где я нахожусь)

bool testArray(int[] values, char op) {
    if ('&' == op) {
        for (int i = values.length; i > 0; i--) {
            if (!IsGreaterThanTen(values[i])) {
                 return false;
            }
        }
        return true; // if none failed, then all passed
    } elseif ('|' == op) {
        for (int i = values.length; i > 0; i--) {
            if (IsGreaterThanTen(values[i])) {
                 return true;
            }
        }
        return false; // if none passed, then all failed
    }
    return null; // an invalid op was passed
}

int[] array = new int[]{ 1, 3, 5, 7, 9, 11, 13, 15, 17, 19.....};
bool result = testArray(array, '&');
2 голосов
/ 06 января 2012

Попробуйте это

static void Main(string[] args)
{
    bool result =
        (
        IsGreaterThanTen(1) &&
        IsGreaterThanTen(5)
        ) &&
        (
        IsGreaterThanTen(10) ||
        IsGreaterThanTen(20)
        );
}
1 голос
/ 06 января 2012

Кстати:

bool doIt(){
    if (IsGreaterThanTen(20))
        return true;
    else if  (!IsGreaterThanTen(1) 
        return false;
    else if(!IsGreaterThanTen(5))
        return false;
    else if(!IsGreaterThanTen(10))
        return false;
    else return true;
}

static void Main(string[] args) {     
    bool result = doIt();
}

В утверждении if это важный порядок утверждений, поэтому я поставил менее дорогой в первую очередь

0 голосов
/ 06 января 2012

Я понятия не имею, что такое пользовательская настройка, но вы можете попробовать это:

var results = userSettings == "something1" ? IsGreaterThanTen(1) &&   
IsGreaterThanTen(3) ||   
IsGreaterThanTen(5) &&   
IsGreaterThanTen(7) ||   
IsGreaterThanTen(9) &&   
IsGreaterThanTen(11) : userSettings == "something2" ? IsGreaterThanTen(1) ||   
IsGreaterThanTen(3) &&
IsGreaterThanTen(5) ||
IsGreaterThanTen(7) &&   
IsGreaterThanTen(9) ||   
IsGreaterThanTen(11);

и т. Д., При необходимости вы также можете комбинировать это с циклом for

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