476 Stimmen

Eine generische Liste anonymer Klassen

In C# 3.0 können Sie anonyme Klassen mit der folgenden Syntax erstellen

var o = new { Id = 1, Name = "Foo" };

Gibt es eine Möglichkeit, diese anonymen Klassen zu einer generischen Liste hinzuzufügen?

Exemple :

var o = new { Id = 1, Name = "Foo" };
var o1 = new { Id = 2, Name = "Bar" };

List<var> list = new List<var>();
list.Add(o);
list.Add(o1);

Ein weiteres Beispiel:

List<var> list = new List<var>();

while (....)
{
    ....
    list.Add(new {Id = x, Name = y});
    ....
}

24voto

Rostov Punkte 2378

Ich verwende in der Regel die folgende Methode, vor allem weil man dann mit einer leeren Liste "beginnt".

var list = Enumerable.Range(0, 0).Select(e => new { ID = 1, Name = ""}).ToList();
list.Add(new {ID = 753159, Name = "Lamont Cranston"} );
//etc.

In letzter Zeit habe ich es stattdessen so geschrieben:

var list = Enumerable.Repeat(new { ID = 1, Name = "" }, 0).ToList();
list.Add(new {ID = 753159, Name = "Lamont Cranston"} );

Die Verwendung der Wiederholungsmethode würde es Ihnen auch ermöglichen, dies zu tun:

var myObj = new { ID = 1, Name = "John" };
var list = Enumerable.Repeat(myObj, 1).ToList();
list.Add(new { ID = 2, Name = "Liana" });

und Sie erhalten die ursprüngliche Liste mit dem ersten bereits hinzugefügten Element.

24voto

erikkallen Punkte 32657

Ich denke

List<T> CreateEmptyGenericList<T>(T example) {
    return new List<T>();
}

void something() {
    var o = new { Id = 1, Name = "foo" };
    var emptyListOfAnonymousType = CreateEmptyGenericList(o);
}

wird funktionieren.

Sie könnten es auch so schreiben:

void something() {
    var String = string.Emtpy;
    var Integer = int.MinValue;
    var emptyListOfAnonymousType = CreateEmptyGenericList(new { Id = Integer, Name = String });
}

21voto

MalachiteBR Punkte 560

Sie können dies in Ihrem Code tun.

var list = new[] { new { Id = 1, Name = "Foo" } }.ToList();
list.Add(new { Id = 2, Name = "Bar" });

13voto

MEC Punkte 1512

Ich habe die IL bei mehreren Antworten überprüft. Dieser Code liefert effizient eine leere Liste:

    using System.Linq;
    …
    var list = new[]{new{Id = default(int), Name = default(string)}}.Skip(1).ToList();

12voto

Damith Asanka Punkte 900

In der neuesten Version 4.0 kann dynamisch wie folgt verwendet werden

var list = new List<dynamic>();
        list.Add(new {
            Name = "Damith"
    });
        foreach(var item in list){
            Console.WriteLine(item.Name);
        }
    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X