gpt4 book ai didi

c# - 避免多次嵌套 For Each 循环

转载 作者:太空宇宙 更新时间:2023-11-03 15:09:38 24 4
gpt4 key购买 nike

我是 C# 的新手,正在大学学习我的第一门类(class)。我认为这是 instantiation 的问题,但这是我所追求的。

我想从 te.ED 中获取值,而不必通过多个 for each 循环,就好像答案是“否”一样无需遍历循环并提取多个数据元素(未显示)。有没有办法在 BEFORE 遍历所有 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");
}
}
}
}
}

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

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

根据下面@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)

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

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

最佳答案

我认为您可以像这样在 foreach 中使用 LinQ:

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");
}

关于c# - 避免多次嵌套 For Each 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41786959/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com