1
votes

Comment puis-je obtenir un type d'enfant à partir d'une liste par lambda?

Voici le code:

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

Maintenant, je veux récupérer toute la chaîne A du List Test .

Je dois encore le faire comme ceci:

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

C'est tellement gênant que je veux savoir s'il y a un moyen plus rapide, par exemple en utilisant le lambda?

Merci.


1 commentaires

Liste newList = Test.Select (x => x.A) .ToList ();


3 Réponses :


3
votes
var NewList = Test.Select(x => x.A).ToList();
but this is not faster, only a little less code.

1 commentaires

Eh bien, c'est ce dont j'ai besoin. Merci.



1
votes

Comme mentionné dans cette réponse: https://stackoverflow.com/a/1178913/3121280

vous pouvez le faire comme ceci: p >

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


3 commentaires

c # est un langage sensible à la casse. .select n'est PAS la même chose que .Select .


@AFract J'ai 19k rep, et j'aurais pu l'éditer moi-même. Il est généralement mal vu de modifier le code des autres dans leurs messages et de les aider à comprendre pourquoi le message est incorrect ou peut-être mal interprété. (Peut-être voulait-il dire utiliser un .select d'une autre bibliothèque?)


@FrankerZ Je n'ai pas regardé votre propre réputation, seulement celle de mohRamadan, qui est un nouveau venu. Il se donne un lien vers une réponse qui s'appuie sur la méthode native Linq "Select", il n'y a absolument aucune raison ici d'utiliser une autre bibliothèque, et les noms de méthodes en C # commencent par des majuscules. Donc, pour moi, c'était évidemment une faute de frappe et il m'a semblé utile d'améliorer le message simplement en le corrigeant. Mais je suis d'accord sur vos arguments dans un cas général.



1
votes

Sélectionnez montré par d'autres est ce dont vous avez besoin ici, mais il convient de mentionner SelectMany pour les moments où vous avez besoin de petits-enfants.

C1_C1, C1_C2, C2_C1, C2_C2

L'extrait ci-dessus renvoie ce qui suit:

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


1 commentaires

Ni lié à la question, mais toujours utile à savoir. J'ai vu trop de développeurs C # qui n'étaient pas au courant de SelectMany ().