繁体   English   中英

如何从 lambda 的列表中获取一种类型的孩子?

[英]How can I get one type of the child from a list by lambda?

这是代码:

private struct Child {
        public string A;
        public string B;
        public boolean C;
}
List<Child> Test=new List<Child>();

现在我想从List<Child> Test中获取所有string A 。

我必须这样做:

List<string>NewList=new List<string>();
foreach(Child C in Test)
{
NewList.Add(C.A);
}

太麻烦了,我想是否有更快的方法,例如使用 lambda?

谢谢你。

var NewList = Test.Select(x => x.A).ToList();

但这并不是更快,只是代码少了一点。

如本答案所述: https://stackoverflow.com/a/1178913/3121280

你可以这样做:

NewList = Test.Select(
    x => x.A 
).ToList();

其他人展示的Select是您在这里需要的,但值得一提的是SelectMany用于您需要孙子的时刻。

private class Child
{
    public string Name { get; set; }
    public List<Child> Children { get; set; }
}

public static void Main()
{
    var children = new List<Child>(){
        new Child{
            Name = "C1",
            Children = new List<Child>{
                new Child{ Name = "C1_C1"},
                new Child{ Name = "C1_C2"}
            }},
        new Child{
            Name = "C2",
            Children = new List<Child>{
                new Child{ Name = "C2_C1"},
                new Child{ Name = "C2_C2"}
            }}
        };

    var granchildren = children.SelectMany( c => c.Children);

    Console.WriteLine(string.Join(", ", granchildren.Select(c => c.Name)));
}

上面的代码段输出以下内容:

C1_C1, C1_C2, C2_C1, C2_C2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM