Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Dynamische Parameter in einer Methode
Nejox
myCSharp.de - Member



Dabei seit:
Beiträge: 13

Themenstarter:

Dynamische Parameter in einer Methode

beantworten | zitieren | melden

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.

private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 1838
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von T-Virus am .
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.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15832
Herkunft: BW

beantworten | zitieren | melden

Zitat
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);

private Nachricht | Beiträge des Benutzers
Nejox
myCSharp.de - Member



Dabei seit:
Beiträge: 13

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
JimStark
myCSharp.de - Member

Avatar #dOpLzh7hN1az1g0eGRc0.jpg


Dabei seit:
Beiträge: 255

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von JimStark am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15832
Herkunft: BW

beantworten | zitieren | melden

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 :-)
private Nachricht | Beiträge des Benutzers
Nejox
myCSharp.de - Member



Dabei seit:
Beiträge: 13

Themenstarter:

beantworten | zitieren | melden

Danke für die Antworten.
Ich gehe nochmal anders an das Problem ran um das ganze besser aufzubauen.
private Nachricht | Beiträge des Benutzers