【问题标题】:How do I combine multiple bool method result to a single result using && and ||?如何使用 && 和 || 将多个 bool 方法结果组合成一个结果?
【发布时间】:2012-01-06 06:38:45
【问题描述】:

样本:

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).............. 

我可以将它们与 &&|| 运算符动态组合
我只想知道结果
如何做到这一点?

更新: 我想根据用户设置将它们与||&& 结合起来。

【问题讨论】:

  • 我觉得不错。有什么问题?
  • 是否有关于何时使用&&|| 的规则?
  • 它们是逻辑与、逻辑或,它们做的事情完全不同。
  • 使用 && 或 ||是根据用户设置
  • 这个用户在设置什么字符串什么的?还是我没有正确回答这个问题?

标签: c# asp.net dynamic operators


【解决方案1】:
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;

【讨论】:

  • 谢谢,但我将它们与 || 结合使用或 && 是根据用户设置
  • 那么您必须将if (number % 2 == 0) 更改为根据设置检查要使用的运算符...
【解决方案2】:

试试这个

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

【讨论】:

    【解决方案3】:

    问题仍然含糊不清,但我认为您正在寻找 && 或 ||为整套。你可以简单地使用快捷循环来做到这一点。 (未经测试的代码,我所在的地方没有 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, '&');
    

    【讨论】:

      【解决方案4】:

      顺便说一句:

      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 语句中,语句的顺序很重要, 所以我把便宜的放在第一位

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 2015-04-04
          • 1970-01-01
          • 1970-01-01
          • 2016-10-05
          • 1970-01-01
          • 2021-03-06
          • 2012-10-12
          • 2014-06-06
          • 1970-01-01
          相关资源
          最近更新 更多