> 백엔드 개발 > C++ > '컬렉션이 고정 크기였습니다' 예외 없이 C#에서 속성에 특성을 동적으로 할당하려면 어떻게 해야 합니까?

'컬렉션이 고정 크기였습니다' 예외 없이 C#에서 속성에 특성을 동적으로 할당하려면 어떻게 해야 합니까?

Susan Sarandon
풀어 주다: 2025-01-02 22:42:40
원래의
706명이 탐색했습니다.

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

동적으로 속성에 속성 할당

런타임 시 속성에 유효성 검사 속성을 할당하려고 시도하는 동안 "컬렉션이 다음과 같습니다. 고정된 크기" 예외. 이 오류의 원인은 속성 설명자의 속성 컬렉션을 직접 수정할 수 없기 때문입니다. 우리의 목표는 속성 할당을 수행하기 위한 대체 접근 방식을 탐색하는 것입니다.

제공된 코드 조각은 FillAttributes 메서드를 사용하여 속성을 추가하려고 시도하지만 이 메서드는 일반적으로 내부용으로 사용되며 전체에서 액세스하지 못할 수도 있습니다. 사례. 보다 안정적인 접근 방식은 동적 어셈블리와 유형을 생성한 다음 새로 생성된 유형에 속성을 할당하는 것입니다.

예를 자세히 살펴보겠습니다.

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

public class ValidationAttribute : Attribute
{
    public string ErrorMessage { get; set; }
}

public class Person
{
    public string Name { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        AssemblyName assemblyName = new AssemblyName("MyPersonAssembly");
        AssemblyBuilder assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave);
        ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyPersonModule");
        TypeBuilder typeBuilder = moduleBuilder.DefineType("MyPerson", TypeAttributes.Public);

        PropertyBuilder namePropertyBuilder = typeBuilder.DefineProperty("Name", PropertyAttributes.None, typeof(string), null);

        ConstructorInfo attributeConstructor = typeof(ValidationAttribute).GetConstructor(new[] { typeof(string) });
        CustomAttributeBuilder attributeBuilder = new CustomAttributeBuilder(attributeConstructor, new object[] { "Name is required" });

        namePropertyBuilder.SetCustomAttribute(attributeBuilder);

        Type newPersonType = typeBuilder.CreateType();
        Person person = (Person)Activator.CreateInstance(newPersonType);
    }
}
로그인 후 복사

이 예에서는 동적 어셈블리, 모듈 및 유형. 그런 다음 속성을 생성하고 여기에 사용자 지정 유효성 검사 속성을 할당합니다. 마지막으로 동적으로 생성된 유형의 인스턴스를 생성하고 속성이 올바르게 할당되었는지 확인할 수 있습니다.

이 접근 방식을 사용하면 "컬렉션이 고정 크기였습니다" 예외를 피하고 속성에 속성을 동적으로 할당할 수 있습니다. , 런타임 속성 수정 시 더 큰 유연성을 제공합니다.

위 내용은 '컬렉션이 고정 크기였습니다' 예외 없이 C#에서 속성에 특성을 동적으로 할당하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿