Liste von Listen verschiedener Typen

8

Eine der Datenstrukturen in meinem aktuellen Projekt erfordert, dass ich Listen verschiedener Typen (String, int, float usw.) speichere. Ich muss in der Lage sein, beliebig viele Listen dynamisch zu speichern, ohne zu wissen, welche Typen sie sind.

Ich habe versucht, jede Liste als object zu speichern, aber ich stieß auf Probleme beim Zurückwerfen in den passenden Typ (es erkannte immer alles als List<String> ).

Zum Beispiel:

%Vor%

Mache ich etwas falsch? Gibt es eine bessere Möglichkeit, eine Liste von Listen verschiedener Typen zu speichern, oder gibt es eine bessere Möglichkeit, festzustellen, ob es sich um eine Liste eines bestimmten Typs handelt?

    
themarshal 19.03.2010, 20:15
quelle

2 Antworten

10

Der Typ List<T> erbt von der nicht generischen Schnittstelle IList . Da alle Werte des Typs myList an die List<T> gebunden sind, können Sie sie als nicht-generische IList verwenden. Damit können Sie Ihre Logik erheblich vereinfachen

%Vor%

Oder Sie wissen, dass alle in myList gespeicherten Werte eine gebundene Version von List<T> sind. Verwenden Sie stattdessen IList als Typ anstelle von object .

%Vor%     
JaredPar 19.03.2010, 20:19
quelle
2

Ich weiß, dass dies ein altes ist, aber .NET 4 gab uns einen anderen Weg. Was ist, wenn Sie eine Liste haben möchten, in der X eine andere Liste ist und y überhaupt ein Typ ist?

Mit anderen Worten, eine Liste & gt; Sie könnten versuchen, Objekt, aber dann würden Sie für immer versuchen, etwas zurück zu seinem ursprünglichen Typ wie oben zu werfen.

Dies ist ein seltenes Szenario, in dem der neue dynamische Datentyp verwendet werden kann. Natürlich erlaubt es Ihnen, die Typensicherheit zu brechen, aber in diesem Fall, da wir uns immer mit einer Liste irgendeiner Art beschäftigen, ist es fair zu sagen, dass sie eine Eigenschaft ".Count" haben wird.

>

So etwas wie:

%Vor%

Wenn Sie also dynamic verwenden, können Sie die Typsicherheitsprüfungen löschen. Viele Entwickler sind gegen den Einsatz von Dynamic. Ich habe mich tatsächlich entschieden, etwas nach einer Liste von Listen verschiedener Typen zu suchen, und bin hierher gekommen. Also fügte ich meinem Problem eine eigene Lösung hinzu. Es wird tatsächlich als eine Liste von Testdaten verwendet, wobei eine äußere Liste eine Liste von Parameternamen und eine Auflistung von neun Werten enthält, die beim Testen verwendet werden. Diese sind je nach Parameter unterschiedlich, und ich wollte nicht ständig von Objekten auf Typen zurückspringen, die ich während der Quellcodeerstellung kenne. Ich fand das eine bequeme Lösung.

    
Simon Miller 15.04.2014 13:58
quelle

Tags und Links