Как я могу получить один тип ребенка из списка по лямбде? - PullRequest
1 голос
/ 10 ноября 2019

Вот код:

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

Теперь я хочу получить все string A от List<Child> Test.

Я должен сделать это еще так:

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

Это так хлопотно, что я хочу узнать, есть ли способ быстрее, например, с помощью лямбды?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 10 ноября 2019
var NewList = Test.Select(x => x.A).ToList();

но это не быстрее, только немного меньше кода.

1 голос
/ 10 ноября 2019

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
1 голос
/ 10 ноября 2019

Как уже упоминалось в этом ответе: https://stackoverflow.com/a/1178913/3121280

вы можете сделать это так:

NewList = Test.Select(
    x => x.A 
).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...