Das Hinzufügen von Attributen zu Eigenschaften zur Laufzeit ermöglicht eine flexible Konfiguration und Validierung Ihrer Objekte. Allerdings kann es bei bestimmten Ansätzen zu der Ausnahme „Sammlung hatte eine feste Größe“ kommen.
Der Ursprung der Ausnahme
Dieser Fehler tritt auf, wenn Sie versuchen, eine zu ändern Die integrierte Attributsammlung des Eigenschaftsdeskriptors, die normalerweise als Array fester Größe definiert wird. Das direkte Ändern dieser Sammlung kann die Ausnahme verursachen.
Lösung
Um dieses Problem zu vermeiden, können Sie dynamisch eine neue Attributsammlung erstellen, anstatt die vorhandene zu ändern. Hier ist eine überarbeitete Version des Codes:
var propDesc = TypeDescriptor.GetProperties(typeof(T))[propName]; var newAttribs = propDesc.Attributes.Cast<Attribute>().ToList(); var attribute = new RequiredAttribute(); newAttribs.Add(attribute); // Set the new attributes collection in the property descriptor propDesc.SetAttributeCollection(new ReflectiveAttributeCollection(newAttribs));
Dieser Code erstellt eine neue „ReflectiveAttributeCollection“ mit den gewünschten Attributen, einschließlich des RequiredAttribute. Durch Festlegen dieser neuen Sammlung im PropertyDescriptor können Sie der Eigenschaft dynamisch Attribute hinzufügen.
Zusätzliche Überlegungen
Indem Sie diese Richtlinien befolgen, können Sie zur Laufzeit erfolgreich Attribute zu Eigenschaften hinzufügen und die Flexibilität Ihres Codes verbessern.
Das obige ist der detaillierte Inhalt vonWie füge ich Attribute dynamisch zu Eigenschaften in C# hinzu, ohne die Ausnahme „Sammlung hatte eine feste Größe'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!