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); } }
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!