C# 循环生成很多行?
我无法理解为什么这段代码会生成很多空行:C# 循环生成很多行?,c#,linq,C#,Linq,我无法理解为什么这段代码会生成很多空行: int nr = 0; foreach (var item in lists.Select(x => x.match_id)) { foreach (var match in lists) { Console.Write(match.nickname .Where(x => lists[nr].match_id == match.match_id) .Select
int nr = 0;
foreach (var item in lists.Select(x => x.match_id))
{
foreach (var match in lists)
{
Console.Write(match.nickname
.Where(x => lists[nr].match_id == match.match_id)
.Select(z => match.nickname)
.FirstOrDefault());
}
nr++;
}
列表
是一个对象数组。输出:
在所有空值的下面是下一个记录,然后是更多的空值等等。为什么?在同一数组中循环两次。我想你想做:
for(int i = 0; i < lists.length; i++){
Console.Write(item.nickname
.Where(x=> lists[i].match_id === item.match_id)
.Select( z=> item.nickname)
.FirstOrDefault());
}
for(int i=0;i列出[i]。匹配\u id==项。匹配\u id)
.Select(z=>item.昵称)
.FirstOrDefault());
}
快速查看后我的2美分。要不输出
null
,您不需要调用控制台。如果值为null
,则写入
试着这样做:
int nr = 0;
foreach (var item in lists.Select(x => x.match_id))
{
foreach (var match in lists)
{
var n = match.nickname
.Where(x => lists[nr].match_id == match.match_id)
.Select(z => match.nickname)
.FirstOrDefault();
if (n != null)
{
Console.Write(n);
}
}
nr++;
}
您是否验证了所有记录都有一个昵称
?因为您不过滤昵称,而是根据匹配度选择元素,每个对象数组中有10个昵称如果您非常确定,为什么不使用First
方法而不是FirstOrDefault
?只是说说而已。好吧,您的最后一个linq方法是FirstOrDefault()
,它被设计为在Select
方法不返回任何记录时返回null
。这解决了他的问题。。。编程真的很糟糕。他说他有一系列的物体。我们知道这些对象有一个Id和一个昵称。现在,您首先遍历整个列表以获得var项(我猜它是一个整数)。我们实际上什么都不做???。然后,我们再次循环浏览与之前相同的列表。在这个循环中我们有match,它是一个对象作为OP状态。然后我们想要输出该对象的昵称,在列表中match_Id等于match.match_Id。我想这只是一场赌博,因为我们不知道他想要完成什么…为什么不在LINQ查询中添加一个where子句,暗示昵称不为null,类似于x=>!string.IsNullOrEmpty(x.昵称)