Laden...

Dynamische Parameter in einer Methode

Erstellt von Nejox vor 2 Jahren Letzter Beitrag vor 2 Jahren 359 Views
N
Nejox Themenstarter:in
19 Beiträge seit 2016
vor 2 Jahren
Dynamische Parameter in einer Methode

Hallo zusammen,

ich hoffe ich kann mein Problem gut beschreiben denn ich weis nicht wonach ich Suchen sollte.

Ich habe meine Hauptklasse und eine Klasse mit Properties


class Main
    {
        public Main()
        {
            Person person = new Person()
            {
                Vorname = Tom,
                Alter = 12,
                Geschlecht = M
            };

            Code code = new Code(person);
        }
    }


class Person
    {
        public string Name{ get; set; }

        public string Vorname{ get; set; }

        public string Alter { get; set; }

        public string Geschlecht { get; set; }
    }

Und ich habe eine Klasse in der Code ausgeführt wird. Hier möchte ich das meine Methode Dynamische Parameter besitzt die sich anhand der items von der Personen Klasse orientieren. D.h. wenn ich eine Personen Klasse mit 3 Propteries initialisiere und übergebe soll es mir 3 Parameter in der Methode erstellen. Initialisiere ich 4 werden mir 4 Parameter erstellt. etc.


class Code
    {
        public Code(Person personDaten)
        {
            DoSomething(personDaten);
        }

        private void DoSomething( /*> Hier sollen die Parameter Dynamisch aus dem übergeben objekt Person klasse erstellt werden in einer Reinfolge die ich anhand der Person Klasse selber bestimme <*/)
        {
            Console.WriteLine(paramVorname, paramAlter, paramGeschlecht);
              //Ausgabe wäre in diesem Fall 
              //Tom, 12, M
        }
    }

Ich hoffe das ist einigermaßen verständlich 🙂
Ist so etwas möglich? Wenn ja hätte jemand ein simples Beispiel?

Freue mich auf eure Antworten.

T
2.219 Beiträge seit 2008
vor 2 Jahren

Was du dort machen willst, kann nicht funktionieren ohne, dass man weitere Informationen mitgibt welche Eigenschaften ursprünglich initalisiert wurden.
Aber das Konzept selbst klingt zusehr nach magischen Code.
Kannst du den genaueren Zweck mal erklären?
Da du Daten aus deiner Personen Klasse nutzen willst, dann kannst du einfach prüfen ob diese gefüllt sind.
Bei String kannst du dies per String.IsNullOrEmpty prüfen.

Bei den anderen Datentypen wäre es dann nötig, diese zu Nullable umzuwandeln und einfach einen Null Check zu machen.

Nachtrag:
Wenn es dir nur um die Ausgabe geht, dann kannst du dies auch einfach lösen, in dem du eine Eigenschaft hast, dass deine Daten als String liefert.
Oder du legst dir eine Methode in deiner Klasse an, die einfach die gefüllten Felder in deinem Format ausgibt.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

16.807 Beiträge seit 2008
vor 2 Jahren

Methode Dynamische Parameter

Bei C# bzw. NET handelt es sich um eine typsierte Sprache bzw. typisierte Runtime, ergo kannst Du nicht wie wild irgendwelche Parameter reinwerfen und irgendeine schwarze Magie weiß dann, wo die Werte landen.

Willst Du Dir die etwas aufwändige Schreibarbeit einer Klasse sparen, kannst Du sie als record umsetzen, sofern die Anforderung an die Klasse passt.
https://docs.microsoft.com/de-de/dotnet/csharp/whats-new/csharp-9
https://docs.microsoft.com/de-de/dotnet/csharp/whats-new/tutorials/records (die automatische Übersetzung nennt sie Datensatztypen, empfehle lieber den englischen Artikel)

Wir verwenden auch wo immer möglich in der Forensoftware records, um wenig Code-Overhead zu haben.


namespace MyCSharp.Portal.WebApp.Models
{
    public record PortalUserSession(string UserName, int UserId);
}

Mit C# 10 kann man dann noch die Namespace-Overhead verringern.


namespace MyCSharp.Portal.WebApp.Models;
public record PortalUserSession(string UserName, int UserId);

N
Nejox Themenstarter:in
19 Beiträge seit 2016
vor 2 Jahren

Hallo,

mein Ziel ist es eine Art Dynamische Methode zu erstellen und auf Basis der Person Klasse soll die Anzahl der Paramater Dynamisch gesetzt werden.

Ich habe eine DLL. Diese DLL hat viele Versionen und es müssen auch weiterhin ältere Versionen angesprochen werden. Mittels DLL import wird die gewünschte DLL geladen.
Nun müsste ich ja unterscheiden welche Methode ich anspreche je nach Parameteranzahl die übergeben wurde. Und genau das wöllte ich durch eine Dynamische Methode ändern wollen. Eine Methode die ihre Parameter selbst aufbaut.

Aber soweit wie ich das Verstanden habe ist das nicht möglich?

Erstmal Danke für eure Antworten.

309 Beiträge seit 2020
vor 2 Jahren

Was soll das bringen? Und musst die Methoden dann ja auch aufrufen, da musst du die Parameter angeben.
Du könntest mit Überladungen arbeiten, welche die Klassen entgegen nehmen oder im Extremfall mit params-Schlüsselwort für Parameterarrays – C#-Referenz was aber höchstwahrscheinlich in ultra unsauberen Code endet und nicht zu empfehlen ist 😁

16.807 Beiträge seit 2008
vor 2 Jahren

Richtig, wir haben sehr viel Glück, dass wir mit einer Sprache arbeiten, in der so ein Käse nicht möglich ist.
Das wäre die untypisierte Büchse der Pandora.

Wenn du ein Plugin System bauen willst, dann mach's richtig 🙂

N
Nejox Themenstarter:in
19 Beiträge seit 2016
vor 2 Jahren

Danke für die Antworten.
Ich gehe nochmal anders an das Problem ran um das ganze besser aufzubauen.