避免多次嵌套 For Each 循环

Red*_*een 5 c# foreach loops

我是 C# 新手,正在大学学习我的第一门课程。我认为这是一个问题,instantiation但这就是我所追求的。

我想从te.ED不必经过多个for each循环的情况中获取值,就好像答案是“否”,那么就不需要经过循环并提取多个数据元素(未显示)。有没有办法在执行所有循环之前检查该值for each

代码在这里

TR reply = service.track(request);
foreach (CTD ctd in reply.CTD)
{
    foreach (TD td in ctd.TD)
    {
        if (td.Events != null)
        {
            foreach (TE te in td.Events)
            {
                if (te.TimestampSpecified)
                {
                    //This is where the field I am after exists
                    if (te.ED == "YES")
                        Console.WriteLine("The answer is yes");
                    else 
                        Console.WriteLine("The answer is no");
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

根据 @Anis Programmer 的评论 - 我相信您希望看到TD类中的元素CTD。如果是这种情况 - 见下文

[System.Xml.Serialization.XmlElementAttribute("TD")]
public TD[] TD {
    get { return this.tdf; }
    set { this.tdf = value; }
}
Run Code Online (Sandbox Code Playgroud)

根据下面 @Neel 的回答 - 我非常接近语法

var result = reply.CTD.SelectMany(c1 => c1.TD)
                  .SelectMany(c2 => c2.Events.Select(c3 => c3.TimestampSpecified));


foreach (var ltr in result)
    Console.WriteLine(ltr)
Run Code Online (Sandbox Code Playgroud)

现在的问题是foreach循环进行了两次传递,两次返回的值是True

我需要在此语法中更改什么?

shA*_*A.t 1

我认为你可以像这样使用 LinQ foreach

foreach (
    var te in from ctd in reply.CTD
    from td in ctd.TD
    where td.Events != null
    from te in td.Events
    where te.TimestampSpecified
    select te)
{
    Console.WriteLine(te.ED == "YES" ? "The answer is yes" : "The answer is no");
}
Run Code Online (Sandbox Code Playgroud)