Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menambah Atribut secara Dinamik pada Hartanah dalam C# Tanpa Ralat 'Koleksi adalah saiz tetap'?

Bagaimanakah Saya Boleh Menambah Atribut secara Dinamik pada Hartanah dalam C# Tanpa Ralat 'Koleksi adalah saiz tetap'?

Susan Sarandon
Lepaskan: 2025-01-03 01:22:39
asal
893 orang telah melayarinya

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

Menambahkan Atribut pada Sifat Secara Dinamik

Apabila menyesuaikan sifat pada masa jalan, adalah perkara biasa untuk menghadapi masalah semasa cuba menambah atribut. Ralat "Koleksi adalah saiz tetap" sering timbul dalam senario sedemikian.

Dalam coretan kod yang disediakan, ralat berlaku kerana percubaan untuk menambah atribut pada sifat sedia ada melibatkan pengubahsuaian deskriptor sifat, iaitu tidak berubah.

Untuk menangani isu ini, satu pendekatan ialah mencipta harta baharu dan menambah atribut yang dikehendaki padanya. Walau bagaimanapun, ini memerlukan pembinaan semula jenis, yang tidak cekap.

Penyelesaian alternatif dan lebih praktikal ialah memanfaatkan pemasangan dinamik. Ini membenarkan untuk mencipta jenis baharu pada masa jalan, dengan atribut yang diingini digunakan.

Contoh kod berikut menunjukkan cara mencipta jenis dinamik dengan atribut tersuai:

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);
    }
}
Salin selepas log masuk

Dalam pendekatan ini , kami mencipta jenis baharu dan menambah atribut yang diingini semasa definisinya. Ini membolehkan kami menyesuaikan sifat dan atributnya secara dinamik tanpa mengubah suai objek sedia ada.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menambah Atribut secara Dinamik pada Hartanah dalam C# Tanpa Ralat 'Koleksi adalah saiz tetap'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan