Announcement

Collapse
No announcement yet.

Referenz ode nun doch nicht?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    also entweder habe ich da irgend was noch nciht vertanden oder ich habe jetzt die seltsamste aller seltsamheiten dieser sprache entdekt.

    als ich das gesehen habe dachte ich mir erst mal "das meinen die jetzt nicht im ernst"

    also ich mache in meinem code folgendes:

    Code:
    void Methode1()
    {
            List<Item> ItemList = null;
            Methode2(new object[]{MsgType.Typex, ItemList});
    }
    
    void Methode2(object[] obj)
    {
           switch((MsgType)obj[0]
           {
                   case Typex:
                           SetzeWert(obj);
                           break;
                    case Typey:
                           SetzeAnderenWert(obj);
                           break;
           }
    }
    so nun wird der wert zwar übergeben aber in Methode1 nicht gesetzt.
    ich habe das ganze mal versucht mit "ref" zu machen aber der mag da anscheinend keine objects. also habe ich das ganze mal mit "params" ausprobiert.

    Code:
    void Methode1()
    {
            List<Item> ItemList = null;
            Methode2(new object[]{MsgType.Typex, ItemList});
    }
    
    void Methode2(params object[] obj)
    {
           switch((MsgType)obj[0]
           {
                   case Typex:
                           SetzeWert(obj);
                           break;
                    case Typey:
                           SetzeAnderenWert(obj);
                           break;
           }
    }
    So konnte ich im debugger sehen das der wert in Methode2 gesetzt wurde von der methode SetzeWert. Nur die Methode1 hat davon nichts mitbekommen.

    gehe ich nun hin und mache folgendes

    Code:
    void Methode1()
    {
            List<Item> ItemList = null;
            object[] Params = new object[]{MsgType.Typex, ItemList};
            Methode2(Params);
    }
    
    void Methode2(params object[] obj)
    {
           switch((MsgType)obj[0]
           {
                   case Typex:
                           SetzeWert(obj);
                           break;
                    case Typey:
                           SetzeAnderenWert(obj);
                           break;
           }
    }
    jetzt steht der korrekte wert in Params aber ItemList selber wurde trozdem nicht gesetzt also mußte ich noch die zuweisung hinzufügen was ich nun total überflüssig finde.

    Code:
    void Methode1()
    {
            List<Item> ItemList = null;
            object[] Params = new object[]{MsgType.Typex, ItemList};
            Methode2(Params);
            ItemList = (List<Item>)Params[1];
    }
    das kranke finde ich ja auch noch, wenn ich das als einzelne parameter übergebe es auch nicht funktioniert.

    Code:
    void Methode1()
    {
            List<Item> ItemList = null;
            Methode2(MsgType.Typex, ItemList);
    }
    also irgend wie finde ich das konstrukt extremst seltsam

    mfg
    Zebes

    Comment


    • #17
      Dein letzter Code funktioniert natürlich wenn due ItemList per ref übergibst.

      Der Code via variabler Paramliste (new Object { .usw. ) geht nicht weil du dort (soweit ich weiß) keine Übergabe per ref hinbekommen wirst.

      Wenn du unbedingst eine variable Paremeterliste möchtest
      solltest du ItemList vor dem Aufruf der Funktion erzeugen und nicht in der Funktion. Du kennst denn Spruch bestimmt 'Objekte werden da erzeugt wo sie auch zerstört werden'. Ist bei Garbage Collected Sprachen nicht mehr ganz so offensichtlich das das weniger fehlerträchtig ist, gilt aber trotzdem weiterhin.

      Comment


      • #18
        also beim letzten code funktioneirt es nicht da die definition ja immer noch

        void Methode2(params object[] obj)

        und wie du richtig bemerkt hast kann man bei parameterlisten kein ref verwenden.

        naja also das mit dem new im funktionsaufruf finde ich persönlich einfach schöner. nur scheint es da irgeng wie problem mit der referenzen übergabe zu geben.

        mfg
        Zebes

        Comment


        • #19
          Wir haben unterschiedliche Vorstellungen was dein letzter Code war

          Ich meinte die Stelle an der du dich beklagst das das nicht mal bei einzelner Übergabe der Parameter funktioniert.
          Die hier ...

          Code:
          void Methode1()
          {
                  List<Item> ItemList = null;
                  Methode2(MsgType.Typex, ItemList);
          }
          Wenn Methode 2 als

          Code:
          void Methode2(MsgType msgType,  ref List<Item> itemList)
          definiert ist sollte das gehen.

          Comment


          • #20
            ja das wäre ja blöd dann bin ich ja an die liste gebunden und genau das wollte ich nicht. die parameter sollen beliebig sein.

            mfg
            Zebes

            Comment

            Working...
            X