我想结合并在循环中显示一次两个项目?我尝试如下但我没有完成,因为指定的项目显示两次。
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.
}
}
}
答案 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)
假设:
您有一组定义为{ int Id, string Value }
,
您希望查找Id
个20
和21
的两个项目,
您希望将其字符串值连接到新字符串
您可以简单地使用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是否为空?