Wie konvertiert man Objekt in ListMyClass?

8

Ich versuche eine generische Methode zu erstellen, die jedes Objekt akzeptieren kann, in dem auch das Objekt List<AnyClass> ist. Etwas wie:

%Vor%

Also in meiner Methode akzeptieren sie den Parameter als Objekt, dann werde ich bestimmen, was ich mit ihrem Typ machen soll

Wenn ich weiß, dass es sich um einen List-Typ handelt, möchte ich dieses Objekt wieder in List<AnyClass> konvertieren, jedes Objekt und seine Eigenschaften

wiederholen

Ich habe versucht zu tun:

%Vor%

Aber es wird null zurückgeben, weil das Objekt ursprünglich List<AnyClass>

ist

Vielen Dank im Voraus

=================

Edit: Tut mir leid, ich habe es nicht klar gemacht, weil ich das Problem vereinfacht habe ... Ich meine das Objekt könnte sein:

%Vor%

Sagen wir also, der Benutzer kann sogar List<object> einfügen, aber jedes Objekt in dieser Liste kann eine andere Klasse sein. Deshalb kann ich <T> nicht benutzen.

Das Original meines Problems ist:

%Vor%

Dann ist es mir egal, was sie in die Liste eintragen, auch das Objekt in der Liste enthält eine andere Objektliste ...

    
King 09.03.2011, 20:44
quelle

6 Antworten

11

Die generische List-Klasse implementiert die nicht-generische IList-Schnittstelle, so dass Sie sagen können:

%Vor%

Was Sie jedoch versuchen zu tun, wird im Allgemeinen als schlechte Praxis angesehen, da es jeglichen Anschein von Typsicherheit beseitigt. Wenn Sie erklären, in welchem ​​Kontext Sie dies verwenden, können wir möglicherweise eine bessere Alternative vorschlagen, wie zum Beispiel eine generische Methode.

    
StriplingWarrior 09.03.2011, 20:48
quelle
4

Sie könnten Generics verwenden, um dies zu nutzen

%Vor%     
msarchet 09.03.2011 20:49
quelle
1

Wenn Sie eine generische Methode erstellen möchten, die Aktionen für verschiedene Typen ausführt, erstellen Sie eine echte generische Methode:

%Vor%

Ihre Frage zeigt an, dass Sie eine Methode verwenden möchten, um verschiedene Operationen für verschiedene Typen anstelle der gleichen Operation auszuführen. Vielleicht möchten Sie ein solches Design überarbeiten, indem Sie stattdessen Methodenüberladungen verwenden.

%Vor%

Und so weiter für die gewünschten Typen.

    
Matthew Ferreira 09.03.2011 20:49
quelle
1

List<object> ist ein anderer Typ als z.B. %Code%. Deshalb schlägt deine Besetzung fehl.

Je nachdem, was Ihr Ziel ist, sollten Sie eine andere Lösung wählen. Es scheint, dass Ihre Methode in der Lage sein muss, mit Listen und normalen Objekten umzugehen.

List<int> implementiert List<T> , wodurch Sie alle Elemente aufzählen können.

%Vor%     
Steven Jeuris 09.03.2011 20:54
quelle
0

Es hört sich so an, als sollten Sie Methodenüberladung anstelle der Typerkennung verwenden. Dadurch wird auch Ihre einzelne große Methode in kleinere, wartungsfreundlichere Methoden aufgeteilt.

%Vor%     
Chris Shouts 09.03.2011 20:50
quelle
0
  

Also akzeptiere ich in meiner Methode den Parameter als Objekt, dann werde ich anhand ihres Typs bestimmen, was zu tun ist

Es klingt so, als ob Sie das Schlüsselwort is verwenden möchten:

%Vor%

Verwenden Sie jedoch lieber Methodenüberladungen.

    
Marlon 09.03.2011 20:46
quelle

Tags und Links