> 백엔드 개발 > C++ > '컬렉션이 고정된 크기였습니다' 예외 없이 C#에서 속성에 동적으로 특성을 추가하는 방법은 무엇입니까?

'컬렉션이 고정된 크기였습니다' 예외 없이 C#에서 속성에 동적으로 특성을 추가하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-29 12:07:11
원래의
901명이 탐색했습니다.

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

런타임에 속성에 동적으로 속성 추가

런타임에 속성에 속성을 추가하면 개체를 유연하게 구성하고 검증할 수 있습니다. 그러나 특정 접근 방식을 사용할 때 "컬렉션이 고정된 크기였습니다" 예외가 발생할 수 있습니다.

예외의 출처

이 오류는 컬렉션을 수정하려고 할 때 발생합니다. 일반적으로 고정 크기 배열로 정의되는 속성 설명자의 내장 속성 컬렉션입니다. 이 컬렉션을 직접 수정하면 예외가 발생할 수 있습니다.

해결 방법

이 문제를 방지하려면 기존 속성 컬렉션을 수정하는 대신 새 속성 컬렉션을 동적으로 생성할 수 있습니다. 코드의 수정된 버전은 다음과 같습니다.

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));
로그인 후 복사

이 코드는 필수 속성을 포함하여 원하는 속성을 사용하여 새 ReflectiveAttributeCollection을 생성합니다. PropertyDescriptor에서 이 새 컬렉션을 설정하면 속성에 동적으로 속성을 추가할 수 있습니다.

추가 고려 사항

  • 반사 성능: 리플렉션을 사용하면 성능에 영향을 줄 수 있으므로 사용하세요.
  • 속성 제한: 모든 속성을 동적으로 추가할 수 있는 것은 아닙니다. 추가하려는 속성이 이 기능을 지원하는지 확인하세요.
  • 속성 캐싱: 속성 설명자 속성은 TypeDescriptor 클래스에 캐시되므로 속성 변경을 트리거하려면 캐시를 지워야 할 수도 있습니다.

이러한 지침을 따르면 런타임 시 속성에 속성을 성공적으로 추가하고 코드의 유연성을 높일 수 있습니다.

위 내용은 '컬렉션이 고정된 크기였습니다' 예외 없이 C#에서 속성에 동적으로 특성을 추가하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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