none
Erweiterungsmethode this RRS feed

  • Frage

  • Hallo!

    Ist es möglich, in einer Erweiterungsmethode das LH-Objekt zu referenzieren?
    Ich wollte kein neues Objekt mit new anlegen.

    MyTargetObject targetObject = SourceObject.Convert();
    
    public static TargetObject Convert(this SourceObject sourceObject)
    {
        // Das möchte ich vermeiden...
        TargetObject targetObject = new TargetObject();
        
        targetObject.Property1 = sourceObject.PropertyX;
    
        return targetObject;
    }

    Danke für jeden Denkanstoß!

    Gruß Lars

    Dienstag, 3. Februar 2015 08:34

Antworten

  • Hallo Lars,

    probiers mal hiermit:

    public static class Extensions
    {
        public static Test Convert( this SourceObject sourceObject, TargetObject targetObject )
        {
            targetObject.Property1 = sourceObject.PropertyX;
            return targetObject;
        }
    }
    

    Letztendlich musst Du das wie in einer ganz normalen Methode machen. Einfach das übergeben, was Du in der Methode brauchst. Bei einer Erweiterungsmethode ist dann lediglich der erste Parameter automatisch durch das verwendete Objekt schon vorgegeben.

    Der Aufruf sieht dann bspw. so aus:

    SourceObject sourceObject = new SourceObject( ... );
    TargetObject targetObject = new TargetObject( ... );
    
    targetObject = sourceObject.Convert( targetObject );
    

    Irgendwo musst Du die Instanz erstellen. Entweder inner- oder außerhalb der Methode. Wenn letzteres, sollte die Instanz mit übergeben werden.

    Wenn Du etwas anderes meintest, beschreib das bitte genauer, evtl. kann man dann weitere Ideen einbringen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert Lamizi Dienstag, 3. Februar 2015 09:06
    Dienstag, 3. Februar 2015 09:04
    Moderator

Alle Antworten

  • Hallo,
    was genau meinst du mit LH-Objekt?

    Grundsätzlich hast du in einer Erweitrungsmethode nur das zur Verfügung, was du als Parameter bekommst (außer natürlich andere statische Elemente).

    Wenn sourceObjekt der Werte einer Eigenschaft ist, so hast du so keine Möglichkeit auf die Eigenschaft an sich zuzugreifen, wenn du den Eigenschaftenwert abfragst.

    Sofern ich verstanden habe was du vor hast, kannst du TargetObject nur neu initialisieren.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Dienstag, 3. Februar 2015 09:00
    Moderator
  • Hallo Lars,

    probiers mal hiermit:

    public static class Extensions
    {
        public static Test Convert( this SourceObject sourceObject, TargetObject targetObject )
        {
            targetObject.Property1 = sourceObject.PropertyX;
            return targetObject;
        }
    }
    

    Letztendlich musst Du das wie in einer ganz normalen Methode machen. Einfach das übergeben, was Du in der Methode brauchst. Bei einer Erweiterungsmethode ist dann lediglich der erste Parameter automatisch durch das verwendete Objekt schon vorgegeben.

    Der Aufruf sieht dann bspw. so aus:

    SourceObject sourceObject = new SourceObject( ... );
    TargetObject targetObject = new TargetObject( ... );
    
    targetObject = sourceObject.Convert( targetObject );
    

    Irgendwo musst Du die Instanz erstellen. Entweder inner- oder außerhalb der Methode. Wenn letzteres, sollte die Instanz mit übergeben werden.

    Wenn Du etwas anderes meintest, beschreib das bitte genauer, evtl. kann man dann weitere Ideen einbringen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert Lamizi Dienstag, 3. Februar 2015 09:06
    Dienstag, 3. Februar 2015 09:04
    Moderator
  • Vielen Dank Tom und Stefan für die super schnellen Antworten!

    Habe es verstanden! Klingt auch logisch, wenn man es aus gewisser Entfernung sieht! :-)

    Gruß Lars

    Dienstag, 3. Februar 2015 09:09