【问题标题】:Loop a list and compare it's elements to a condition c#循环列表并将其元素与条件 c# 进行比较
【发布时间】:2018-05-17 13:23:05
【问题描述】:

我需要遍历一个列表。每个元素都应与 2 个条件进行比较。

问题在于,一个元素的结果可能是 True,而另一个元素的结果可能是 False。我必须保留所有这些结果并进行操作 OR,以获得最终结果。

foreach (var elem in mappingList)
{
   if (elem._mappingStatus == enum_MappingStatus.E_MAPPING_OK 
     || elem._mappingStatus == enum_MappingStatus.E_MAPPING_OK_END)
    {
        statusConfiguration = true;
    }
    else
    {
        statusConfiguration = false;
    }
}

我不知道如何为所有元素保留statusConfiguration然后比较它们的问题。如果至少有一个结果是假的,那么最终结果也应该是假的。

提前致谢。

【问题讨论】:

  • 如果你把break;放在statusConfiguration = true;之后会发生什么?
  • 'If a == E_MAPPING_OK and a == E_MAPPING_OK_END' 永远不会为真,除非这两个枚举具有相同的值。是吗?
  • 我的错应该是 OR 运算符。我马上换

标签: c# list foreach


【解决方案1】:

使用Any() 确定是否任何符合这些条件的项目存在

如果至少有一个结果是假的,那么最终结果应该 也是假的

statusConfiguration = mappingList.Any(x => 
                      x._mappingStatus != enum_MappingStatus.E_MAPPING_OK &&       
                      x._mappingStatus != enum_MappingStatus.E_MAPPING_OK_END);

【讨论】:

    【解决方案2】:

    你应该在 statusConfiguration 被 'falsed' 后中断 foreach。

    bool statusConfiguration = true;
    foreach (var elem in mappingList)
    {
        if (elem._mappingStatus == enum_MappingStatus.E_MAPPING_OK 
        & elem._mappingStatus == enum_MappingStatus.E_MAPPING_OK_END)
        {
             statusConfiguration = true;
        }
        else
        {
            statusConfiguration = false;
            break;
        }
    }
    if (!statusConfiguration) {finalResult = false;}
    

    【讨论】:

    • 这可能对那些不想使用 LINQ 的人有所帮助。
    • 鉴于已接受的答案,第一行应为falsebreak 应在if 中。
    猜你喜欢
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    相关资源
    最近更新 更多