다른 개체가 준수해야하는 규칙 집합을 얻는 Constraints
개체가 있습니다.반영된 컨텍스트에서 일반 메서드를 호출하려면 어떻게해야합니까?
constraints
은 GetEnumValueRange<T>()
이라고하는 방법이 있습니다. 여기서 T
은 유형 열거 형입니다.
var val = constraints.GetEnumValueRange<BoxWithAHook>();
문제 : 다음 BoxWithAHook
위해 주어진 컨텍스트 내에서 유효한 값의 범위를 얻을 수
[Flags]
public enum BoxWithAHook
{
None = 0,
Thing1 = 1,
Thing2 = 2,
...
// lots of other things that might be in the box
ThingN = N
}
:
그래서 예를 들어, 나는대로 열거 정의 할 수 이 작업을 수행하기 위해 리플렉션을 사용하려고합니다. 형식이 BoxWithAHook
인 것은 지정할 수 없으므로 Enum
을 확장 할 수 있습니다.
if (propertyInfo.PropertyType.BaseType == typeof(Enum))
{
var val = constraints.GetEnumValueRange<>(); // what is the generic type here?
// now I can use val to get the constraint values
}
그것은 나를 일반적인 유형을 지정하는 가능 :이 내가 무슨의 예입니다? 이상적으로,이 작동합니다 :
constraints.GetEnumValueRange<propertyInfo.PropertyType>();
을하지만, 분명하지 않습니다
Andrei는 ** 일반적인 메소드를 호출해야한다는 측면에서 옳습니다.하지만이 유형의 리플렉션은 * 많은 * 작업을 수행하는 경우 성능을 저하시킬 수 있습니다. 당신이 있다면, 이것을 최적화하는 방법이 있습니다. 단 한 번의 통화로 그만한 가치는 없습니다. 루카 조이드는 ** 당신이 ** 리플렉션을 사용하고 있다면 generics 기반 API를 사용하는 것이 고통 스러울 것입니다. 사실, 나는'Foo (...)'메소드를'Foo (Type type, ...)'메소드로 변경하기 위해 큰 라이브러리의 전체 코어를 다시 작성했다. 결과가 훨씬 행복해졌습니다. –