2012-07-26 21 views
5

Ich habe eine Liste mit vielen Objekten List<MyObjects> - Im Iterieren durch diese Liste und Lesen der Objekte. Das ist alles in Ordnung. Ich habe mich gerade neu belebt, was es toll wäre, wenn ich dieser Liste noch einen besonderen Wert hinzufügen könnte - kein Objekt, nur ein Wert von etwas (eine Zeichenkette).Eigenschaft zu einer Liste hinzufügen?

Ich könnte jetzt eine Klasse wie

class Needless 
{ 
    public List<MyObjects> MyList { get; set; } 
    public string MyValue { get; set; } 
} 

aber Im Versuch schaffen, das zu vermeiden. Ich brauche nur 1 String mit einem Eingang alle List<MyObjects> Irgendwelche Ideen?

+0

Ist 'MyValue' unabhängig von den Werten in' MyList'? –

+0

MyValue identifiziert MyList – miri

+0

Würde es in dieser Situation funktionieren, die 'MyList' und' MyValue' zu ​​einem 'Dictionary' hinzuzufügen, wie' Dictionary > '? –

Antwort

8

Tuple<string, List<MyObject>> ist eine Option. Wenn Sie jedoch diese Paarung viel verwenden möchten, würde ich empfehlen, eine benutzerdefinierte Klasse zu erstellen, damit sie expliziter ist - entweder wie Sie getan haben oder indem Sie List<MyObject> abgeleitet haben und die Zeichenfolge als Eigenschaft hinzufügen.

Wenn Sie „in scope“ arbeiten könnte man immer anonyme Typen machen:

var t = new { TheString = "", TheList = new List<MyObject>() }; 
var list = t.TheList; 
var s = t.TheString; 

Aber dies nur wirklich hat Nutzen im Rahmen eines Verfahrens. Der Compiler kann IntelliSense dafür geben, und es wird zur Kompilierungszeit stark typisiert.

Oder wenn Sie wirklich alle wollen gehen, verwenden ExpandoObject von System.Dynamic:

var expando = new ExpandoObject(); 
expando.List = new List<MyObject>(); 
expando.TheString = ""; 

Dies ist in-line getippt ohne IntelliSense-Unterstützung und wird das DLR berufen. ExpandoObject verwendet einfach eine IDictionary<string, object> unter der Haube, so ...

var dict = (IDictionary<string, object>)expando; 

... gültig ist.

Die letzte Option ist eine kleine ironisch. Es wird funktionieren, aber die Entwicklungserfahrung ist im Vergleich zu anderen Optionen nicht ideal. Das heißt, wir verwenden ExpandoObject in unserem Testcode, aber ich kann mich nicht erinnern, warum. Man kann nur hoffen, dass die Argumentation solide war, aber es war wahrscheinlich, dass ein Entwickler mit neuen Spielzeugen schwindlig wurde ...

+2

+1 würde das nur andeuten. – mellamokb

2

Sie können die Liste erben und einfach Ihre Eigenschaft hinzufügen, sie ist ein wenig sauberer als die Liste in einer anderen Klasse

0

Sie könnten eine List-Implementierung mit Ihrer Needless-Klasse erweitern. Auf diese Weise können Sie Ihre Liste weiterhin als Liste behandeln.

Verwandte Themen