myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » List<T> in List mit festem Datentypen umwandeln
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

List<T> in List mit festem Datentypen umwandeln

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Chris1009 Chris1009 ist männlich
myCSharp.de-Mitglied

Dabei seit: 31.01.2019
Beiträge: 2


Chris1009 ist offline

List<T> in List mit festem Datentypen umwandeln

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Moin Leute,
ich habe seit ein paar Tagen folgendes Problem.

Ich habe mir eine universelle Liste geschrieben:

C#-Code:
public class UniversalList<T> : List<T>, IEnumerable
{
}

Diese Klasse ist eine Liste, die man entsprechend sortieren und mit LINQ abfragen kann. Weiterhin habe ich an diese "universelle" Liste entsprechend den Inhalten ExtensionMethoden gehaengt, die es nun den Usern der Liste ermoeglichen typen abhaengig entsprechend die moeglichen Funktionen angeboten zu bekommen.

Nun habe ich das Problem dass ich nun als Beispiel eine Liste habe in der z.B. alle moeglichen Elemente in diesem Fall Fahrzuege stehen:

C#-Code:
protected UniversalList<Vehicles> vehicles = new UniversalList<Vehicles>();

Diese Liste hat nun die Erweiterungsmethode:

C#-Code:
public static UniversalList<Car> getCars(this UniversalList<Vehicles> list)
{
  List<Car> elements = getElements(list, "Car");
  UniversalList<Car> targetList = new UniversalList<Car>();
  fillUniversalList(elements, targetList);
  return targetList;
}

und nun MEIN PROBLEM

Die Funktion fillUniversalList bekomme ich einfach nicht hin.
Ich möchte dieser Funktion einmal eine UniversalList uebergeben als Quelle. Diese kann ruhig einen festen Werten habe, dass ich immer sage ok das ist immer eine Liste mit allen Elementen, aber die Rueckgabe, also die Tabelle die gefuellt warden soll muss immer Typensicher sein, Sprich Autos oder Flugzeuge etc. enthalten.

Damit ich auf der Liste die typsicher ist und zurueck kommt ich entsprechend wieder die Erweiterungsmethoden habe etc.

Kann mir da jemand einen Denkanstoss / Hilfe geben?

Brauche Quasi einen

Funktion der ich eine List<Vehicle> uebergebe und wo ich eine zweite Liste uebergebe damit die Funktion den Typen hat List<Car> und mit diese entsprechend gefuellt zurueck gibt.
31.01.2019 23:02 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.166
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

List<T> erfüllt bereits all diese Anforderungen zusammen mit Extension Methods.
Du musst einfach die Möglichkeiten nutzen, die .NET heute schon hat.
Im Prinzip ist das funktionale Programmierung in .NET:  Besserer C#-Code durch funktionale Programmierung | Rainer Stropek

Du erfindest da das Rad neu - nur ist Deines nicht so rund ;-)
Diese "UniversalList" macht aus Architektursicht keinen Sinn.

Was Du mit Tabelle meinst ist unklar; es ist eine Liste - keine Tabelle.

PS: es sollte GetCars heissen nicht getCars - wir sind nicht bei Java :)
 [Artikel] C#: Richtlinien für die Namensvergabe

Und es sind Methoden, keine Funktionen ;-)

Edit:
Wenn ich jetzt diesen doch leicht wirren Beitrag mehrmals durchlesen, dann gehts Dir wahrscheinlich eher um das Casting.

Da es hier nicht steht, sprechen wir von class Car : Vehicle ?
Downcasting ist ein Code Smell; ein Designfehler.

Was ist denn Deine tatsächliche Anforderung?
Vermutlich willst Du hier ein Problem technisch lösen, das durch einen Denk- oder Designfehler entstanden ist.
31.01.2019 23:11 Beiträge des Benutzers | zu Buddylist hinzufügen
Chris1009 Chris1009 ist männlich
myCSharp.de-Mitglied

Dabei seit: 31.01.2019
Beiträge: 2

Themenstarter Thema begonnen von Chris1009

Chris1009 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich nutze ja List<T> entsprechend. Ich habe mich vielleicht etwas falsch ausgedrueckt. Ich suche einfach die Möglichkeit den Inhalt meiner List<T> in eine typensichere List<FESTER TYP> zu schreiben. Dabei soll die Liste mit dem festen Typen aber dynamisch sein, sprich ich möchte diese Liste der Funktion übergeben, die diese dann füllt und als List<FESTEN TYP> zurück gibt.

Ich möchte keine neue List bauen :)

Sonst hast Du auch mit den Methoden, der Liste und mit der Groß und Kleinschreibung Recht! Sorry es ist spat und ich gehe etwas auf dem Zahnfleisch momentan.


mycsharp.de  Moderationshinweis von Abt (31.01.2019 23:26):

Keine Full Quotes  [Hinweis] Wie poste ich richtig?
 
31.01.2019 23:24 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.166
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Evtl verstehe ich es immer noch nicht...meinst Du sowas? verwundert

C#-Code:
    public interface IVehicle { }
    public class Car : IVehicle { }
    public class Truck : IVehicle { }
    public static class Ex
    {
        public static IList<T> Filter<T>(this IEnumerable<IVehicle> verhicles) where T : class, IVehicle
        {
            return verhicles.Where(v => v is T).Cast<T>().ToList();
        }
    }


    class Program
    {

        static void Main(string[] args)
        {
            IList<IVehicle> vehicles = new List<IVehicle>
            {
                new Car(),
                new Car(),
                new Car(),
                new Car(),
                new Truck(),
                new Truck(),
                new Truck()
            };

            var cars = vehicles.Filter<Car>();
            var trucks = vehicles.Filter<Truck>();

            Console.WriteLine("Cars: "+ cars.Count);
            Console.WriteLine("Trucks: " + trucks.Count);
        }
    }

Falls ja: dann baust die die OfType Methode nach.
31.01.2019 23:35 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 9 Monate.
Der letzte Beitrag ist älter als 9 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 13.11.2019 01:13