반응형
기본 유형에 대한 일반 유형 제한을 정의하는 방법은 무엇입니까?
일반 유형의 다음 방법이 있습니다.
T GetValue<T>();
T를 int, string, float와 같은 기본 유형으로 제한하고 싶지만 클래스 유형은 아닙니다. 다음과 같이 클래스 유형에 대한 제네릭을 정의 할 수 있습니다.
C GetObject<C>() where C: class;
프리미티브 타입이 가능한지, 어떻게 가능한지 잘 모르겠습니다.
이를 사용하여 값 유형으로 제한 할 수 있습니다.
where C: struct
또한 문자열을 언급합니다. 불행히도 문자열은 값 유형이 아니므로 허용되지 않습니다.
실제로 이것은 특정 범위까지 작업을 수행합니다.
public T Object<T>() where T :
struct, IComparable, IFormattable, IConvertible, IComparable<T>, IEquatable<T>
숫자 유형으로 제한하려면 ValueType 클래스에 대해 정의 된 다음 샘플에 대한 유용한 힌트를 얻을 수 있습니다.
찾고있는 내용은 다음과 같습니다.
T GetObject<T>() where T : struct;
그 세트와 깔끔하게 일치하는 일반적인 제약은 없습니다. 실제로하고 싶은 것은 무엇입니까? 예를 들어, 정적 ctor (제네릭 유형의 경우-제네릭 메서드의 경우 그렇게 쉽지 않음)와 같은 런타임 검사로 해킹 할 수 있습니다.
하나; 대부분의 경우 사람들이 다음 중 하나를 원하기 때문입니다.
- 항목이 동일한 지 확인할 수 있습니다.이 경우 사용
EqualityComparer<T>.Default
- 항목을 비교 / 정렬 할 수 있도록 : 어떤 경우에 사용
Comparer<T>.Default
- 산술을 수행 할 수 있도록 :이 경우 일반 연산자에 대한 MiscUtil 지원을 사용합니다.
방법에서 실제로하려는 것은 무엇입니까? 실제로 IComparable 또는 다른 인터페이스를 구현하려면 C가 필요할 수 있습니다. 어떤 경우에 당신은
T GetObject<T> where T: IComparable
참고 URL : https://stackoverflow.com/questions/805264/how-to-define-generic-type-limit-to-primitive-types
반응형
'Programing' 카테고리의 다른 글
Java 9 컴파일러의 --release 플래그는 무엇입니까? (0) | 2020.12.05 |
---|---|
gcc가 꼬리 재귀 최적화를 수행하는지 어떻게 확인합니까? (0) | 2020.12.05 |
Scala의 Product 클래스에 대해 어떻게 생각해야합니까? (0) | 2020.12.05 |
XML에 중첩 된 주석? (0) | 2020.12.05 |
Android 에뮬레이터를 빠르게 조정하여 조정할 수 있습니까? (0) | 2020.12.05 |