3 Stimmen

Logik und ihre Anwendung auf Collections.Generic und Vererbung

Alles erbt von object. Das ist die Grundlage der Vererbung. Alles kann implizit in den Vererbungsbaum aufgenommen werden, d.h..

object me = new Person();

Folgt man der logischen Schlussfolgerung, so ist eine Gruppe von Menschen auch eine Gruppe von Objekten:

List<Person> people = new List<Person>();
people.Add(me);
people.Add(you);
List<object> things = people; // Ooops.

Nur funktioniert das nicht. Die Leute, die .NET entwickelt haben, haben das entweder übersehen, oder es gibt einen Grund dafür, und ich bin mir nicht sicher, welchen. Zumindest einmal bin ich in eine Situation geraten, in der dies nützlich gewesen wäre, aber ich musste am Ende einen fiesen Hack verwenden (Unterklassifizierung von List, nur um einen Cast-Operator zu implementieren).

Die Frage ist nun: Gibt es einen Grund für dieses Verhalten? Gibt es eine einfachere Lösung, um das gewünschte Verhalten zu erreichen?

Für das Protokoll, ich glaube, die Situation, dass ich diese Art von Verhalten wollte, war eine allgemeine Druckfunktion, die Listen von Objekten durch den Aufruf ToString() und die Formatierung der Zeichenfolgen schön angezeigt.

1voto

Quintin Robinson Punkte 78652

Mit Linq-Erweiterungsmethoden können Sie Folgendes tun

IEnumerable<object> things = people.Cast<object>();
List<object> things = people.Cast<object>().ToList();

Da Sie die Liste stark typisieren, ist die implizite Konvertierung nicht zulässig.

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