Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 循环生成很多行?_C#_Linq - Fatal编程技术网

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