Programing

기본 유형에 대한 일반 유형 제한을 정의하는 방법은 무엇입니까?

crosscheck 2020. 12. 5. 09:18
반응형

기본 유형에 대한 일반 유형 제한을 정의하는 방법은 무엇입니까?


일반 유형의 다음 방법이 있습니다.

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

반응형