Heim > Backend-Entwicklung > C++ > Wie kann ich Eigenschaften in C# dynamisch Attribute hinzufügen, ohne dass der Fehler „Sammlung hatte eine feste Größe' auftritt?

Wie kann ich Eigenschaften in C# dynamisch Attribute hinzufügen, ohne dass der Fehler „Sammlung hatte eine feste Größe' auftritt?

Susan Sarandon
Freigeben: 2025-01-03 01:22:39
Original
893 Leute haben es durchsucht

How Can I Dynamically Add Attributes to Properties in C# Without the

Attribute dynamisch zu Eigenschaften hinzufügen

Beim Anpassen von Eigenschaften zur Laufzeit kommt es häufig zu Problemen beim Hinzufügen von Attributen. In solchen Szenarien tritt häufig der Fehler „Sammlung hatte eine feste Größe“ auf.

Im bereitgestellten Codeausschnitt tritt der Fehler auf, weil der Versuch, ein Attribut zu einer vorhandenen Eigenschaft hinzuzufügen, die Änderung des Eigenschaftsdeskriptors beinhaltet unveränderlich.

Um dieses Problem zu beheben, besteht ein Ansatz darin, eine neue Eigenschaft zu erstellen und ihr die gewünschten Attribute hinzuzufügen. Dies erfordert jedoch eine Neukonstruktion des Typs, was nicht effizient ist.

Eine alternative und praktischere Lösung ist die Nutzung dynamischer Baugruppen. Dadurch kann zur Laufzeit ein neuer Typ mit den gewünschten Attributen erstellt werden.

Das folgende Codebeispiel zeigt, wie ein dynamischer Typ mit einem benutzerdefinierten Attribut erstellt wird:

using System;
using System.Reflection;
using System.Reflection.Emit;

public static class DynamicAttributeAddition
{
    public static void Main(string[] args)
    {
        // Define the assembly and module
        var assemblyName = new AssemblyName("DynamicAttributeAdditionAssembly");
        var assembly = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
        var module = assembly.DefineDynamicModule(assemblyName.Name);

        // Define the dynamic type
        var typeBuilder = module.DefineType("DynamicType", TypeAttributes.Public);

        // Define the custom attribute constructor
        var attributeConstructorParameters = new Type[] { typeof(string) };
        var attributeConstructor = typeof(CustomAttribute).GetConstructor(attributeConstructorParameters);

        // Define the custom attribute and add it to the dynamic type
        var attributeBuilder = new CustomAttributeBuilder(attributeConstructor, new object[] { "Some Value" });
        typeBuilder.SetCustomAttribute(attributeBuilder);

        // Create the dynamic type
        var dynamicType = typeBuilder.CreateType();

        // Get the custom attribute from the dynamic type
        var attribute = dynamicType.GetCustomAttributes(typeof(CustomAttribute), false).Single();

        // Print the attribute value
        Console.WriteLine(attribute.ConstructorArguments[0].Value);
    }
}
Nach dem Login kopieren

In diesem Ansatz erstellen wir einen neuen Typ und fügen bei seiner Definition das gewünschte Attribut hinzu. Dadurch können wir Eigenschaften und ihre Attribute dynamisch anpassen, ohne vorhandene Objekte zu ändern.

Das obige ist der detaillierte Inhalt vonWie kann ich Eigenschaften in C# dynamisch Attribute hinzufügen, ohne dass der Fehler „Sammlung hatte eine feste Größe' auftritt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage