【问题标题】:How can I get one type of the child from a list by lambda?如何从 lambda 列表中获取一种类型的孩子?
【发布时间】:2019-11-10 02:17:07
【问题描述】:

代码如下:

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

现在我想从List&lt;Child&gt; Test 中获取所有string A。

我必须这样做:

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

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

谢谢。

【问题讨论】:

  • List&lt;String&gt; newList= Test.Select(x =&gt; x.A).ToList();

标签: c# lambda


【解决方案1】:
var NewList = Test.Select(x => x.A).ToList();

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

【讨论】:

  • 嗯,这就是我需要的。谢谢。
【解决方案2】:

其他人显示的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)));
}

上面的sn-p输出如下:

C1_C1, C1_C2, C2_C1, C2_C2

【讨论】:

  • 与问题无关,但知道总是有用的。我见过太多不了解 SelectMany() 的 C# 开发人员。
【解决方案3】:

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

你可以这样做:

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

【讨论】:

  • c# 是区分大小写的语言。 .select.Select 不同。
  • @AFract 我有 19k 代表,我可以自己编辑它。通常不赞成在他们的帖子中编辑其他人的代码,而是帮助他们理解为什么帖子不正确,或者可能被误解。 (也许他的意思是使用来自不同库的.select?)
  • @FrankerZ 我没有看你自己的名声,只看mohRamadan,他是一个新人。他为自己提供了一个依赖于本地 Linq“选择”方法的答案的链接,这里绝对没有理由使用另一个库,并且 C# 中的方法名称以大写字母开头。所以对我来说,这显然是一个错字,仅仅通过修复它来改进帖子似乎很有用。但我同意你在一般情况下的论点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-28
  • 1970-01-01
  • 1970-01-01
  • 2012-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多