>백엔드 개발 >C++ >C# 제네릭 메서드에서 제네릭 형식 인수를 동적으로 지정하려면 어떻게 해야 합니까?

C# 제네릭 메서드에서 제네릭 형식 인수를 동적으로 지정하려면 어떻게 해야 합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-17 20:27:10653검색

How Can I Dynamically Specify Generic Type Arguments in C# Generic Methods?

C# 일반 방법: 가변 유형 매개변수의 유연한 사용

DoesEntityExist<T>(여기서 T는 IGloballyIdentifying 인터페이스를 준수하는 유형을 나타냄)과 같은 C#에서 일반 메서드를 사용할 때 변수 유형을 사용하여 일반 유형 매개 변수(예: Type t = entity.GetType();) 실수입니다. 이는 C# 제네릭에서는 컴파일 타임에 유형 정보를 알아야 하기 때문입니다.

반사 메커니즘 사용

이러한 한계를 극복하기 위해 반사 메커니즘을 사용할 수 있습니다. 이 기술에는 일반 메서드와 연결된 MethodInfo 개체에서 GetMethod 및 MakeGenericMethod 메서드를 호출하는 작업이 포함됩니다. 이를 통해 런타임에만 알려진 유형 매개변수를 동적으로 제공할 수 있습니다.

<code class="language-csharp">MethodInfo method = GetType().GetMethod("DoesEntityExist")
                             .MakeGenericMethod(new Type[] { t });
method.Invoke(this, new object[] { entityGuid, transaction });</code>

메서드 일반성 향상

또 다른 접근 방식은 호출 메서드 자체를 수정하여 일반 메서드로 만드는 것입니다. 이를 통해 필요한 유형 매개변수를 매개변수로 전달할 수 있습니다. 이는 유형 선택 결정을 더 높은 수준으로 끌어올려 후속 메서드 호출을 단순화합니다.

추가설명

보다 구체적인 지침을 제공하려면 문제에 대해 보다 상황에 맞는 정보를 제공하는 것이 가장 좋습니다. 때로는 리플렉션을 사용해야 할 수도 있지만 제네릭 형식 사용을 전략적으로 계획하면 재사용을 최소화할 수 있습니다. 반영 시점을 신중하게 선택하면 유형 매개변수가 동적으로 한 번만 지정되어 다운스트림 코드에서 이를 원활하게 사용할 수 있습니다.

위 내용은 C# 제네릭 메서드에서 제네릭 형식 인수를 동적으로 지정하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.