如何使用&&组合将多个bool方法结果组合成单个结果和||?

时间:2012-01-06 06:38:45

标签: c# asp.net dynamic operators

样品:

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 个答案:

答案 0 :(得分:3)

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;

答案 1 :(得分:2)

试试这个

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

答案 2 :(得分:2)

这个问题仍然模糊不清,但我认为你希望得到&amp;&amp; amp;或者||整套。您只需使用快捷循环即可完成此操作。 (未经测试的代码,我没有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, '&');

答案 3 :(得分:1)

顺便说一下:

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语句中,这是重要的陈述顺序, 所以我先放一些便宜的

答案 4 :(得分:0)

我不知道用户设置是什么,但你可以试试这个:

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循环结合起来