NotSupportedException bei Verwendung der List-Klasse in einem Steuerelement



  • Hallo,

    ich will aus mehreren bestehenden Steuerelementen mir ein eigenes zusammenbauen. Unter anderem verwende ich dabei eine

    List<Int32>
    

    Wenn ich dieses Steuerelement dann verwende, erhalte ich eine

    NotSupportedException

    Zuvor wurde in der Entwurfsansicht eines Testprojekts die Liste mit Werten befüllt.

    Hier noch etwas Code dazu

    List<Int32> valueList = new List<Int32>();
    ...
    public List<Int32> Values
    {
       get { return this.valueList; }
       set { this.valueList = value; }
    }
    

    Im meinen Testprojekt erhalte ich dann an folgender Stelle eine Exception

    this.comboBoxControl1.Values = ((System.Collections.Generic.List<int>)(resources.GetObject("comboBoxControl1.Values")));
    

    Dieser Teil ist ein Windows Form-Designer generierter.

    Welche Möglichkeit besteht sonst noch die Liste zu füllen. Bei Einer ComboBox erzeugt der Windows Form-Designer folgendes

    this.comboBox1.Items.Add("4");
    this.comboBox1.Items.Add("5");
    

    Wie kann ich etwas ähnliches erreichen?



  • Ich weiß nicht konkret, woran das Problem liegt; eventuell lassen sich generische Listen einfach nicht vom Ressourcenmanager serialisieren.

    Aber in jedem Fall ist dieser Code so nicht gut designed. Primär sollte es keinen Setter für die Liste geben sondern nur ein Getter, hierdurch brichst Du die Kapselung. Außerdem programmierst Du gegen eine konkrete Implementierung statt gegen eine Schnittstelle. Will sagen, der Typ 'List<T>' ist ein Implementierungsdetail. Deine Property sollte stattdessen eine Schnittstelle verwenden (z.B. 'IList<T>').

    Ach so, und wieso verwendest Du überall 'System.Int32'? Konvention ist es in C#, die Schlüsselwort-Aliase zu verwenden, also hier 'int'.



  • Ich habe jetzt die IList-Schnittstelle aus System.Collections.Generic implementiert. Wie kann ich, ähnlich wie bei einer ComboBox, in der Entwurfsansicht unter
    Eigenschaften-->Daten
    die Möglichkeit bereitstellen, Werte hinzuzufügen? Bei mir erscheinen lediglich die Propertys
    IsReadOnly
    und
    Count

    Schonmal besten Dank


Anmelden zum Antworten