如何在循环内耦合项目?

时间:2014-01-23 08:09:04

标签: c# loops if-statement foreach

我想结合并在循环中显示一次两个项目?我尝试如下但我没有完成,因为指定的项目显示两次。

string item1 = null, item2 = null;
foreach(var item in myCollection)
{
    if(item.Id == 20)
    {
        item1 = item.Value;
    }
    else if(item.Id == 21)
    {
        item2 = item.Value;
    }

    if(item.Id != 20 && item.Id != 21)
    {
        //adding
    }
    else
    {
        if(item.Id !=null && item.Id != null)
        {
            myValue = item1 + item2;
            //This case is normaly because item.Id everytime is full.
            //I tried like this (item.Id == 20 && item.Id == 21) but i don't find any solution. 
        }
    }
} 

4 个答案:

答案 0 :(得分:1)

很难说出你想要达到的目的是什么。如果您提供更多详细信息,我会相应地更新答案。

我猜你有问题:

(item.Id == 20 && item.Id == 21)

这将永远不会在任何“正常”情况下评估为真,因为item.Id不可能同时为20和21。
(有一些'异国情调'的情况,其他线程可以在第一次比较后立即更新item.Id从20到21,以便此行评估为true。

您可能需要使用||代替&&

(item.Id == 20 || item.Id == 21)

答案 1 :(得分:1)

假设:

  1. 您有一组定义为{ int Id, string Value }

  2. 的项目
  3. 您希望查找Id2021的两个项目,

  4. 您希望将其字符串值连接到新字符串

  5. 您可以简单地使用LINQ:

    var myValue = "";
    
    // find the item with Id == 20 (if it exists)
    var item1 = myCollection.FirstOrDefault(i => i.Id == 20);
    
    // find the item with Id == 21 (if it exists)
    var item2 = myCollection.FirstOrDefault(i => i.Id == 21);
    
    // if both items are found, join their values into a new string
    if (item1 != null && item2 != null)
        myValue = item1.Value + item2.Value;
    

    对于更一般的问题(“连接具有特定ID的所有项目”),您可以将其重写为:

    // list of all IDs you want to find
    var idsToFind = new[] { 20, 21, 22, 23 };
    
    // find items with corresponding IDs
    var items = myCollection.Where(i => idsToFind.Contains(i.Id));
    
    // concatenate results
    var myValue = string.Concat(items);
    

答案 2 :(得分:1)

如果通过组合意味着连接字符串,那么试试这个

string item1 = null, item2 = null,myValue = "";
foreach(var item in myCollection)
{
    if(item.Id == 20)
    {
        item1 = item.Value;
    }
    else if(item.Id == 21)
    {
        item2 = item.Value;
    }

    if(item.Id != 20 && item.Id != 21)
    {
        //adding
    }
    else
    {
        if(item.Id !=null)
        {
            myValue = myValue + item1 + item2;

        }
    }
} 

答案 3 :(得分:1)

在最后一个分支中似乎有一个拼写错误:

if (item.Id !=null && item.Id != null)

您可能想检查item1和item2是否为空?