제네릭 유형의 값을 어떻게 비교합니까?
최소한의 샘플로 줄였습니다.
public class Foo<T> where T : IComparable
{
private T _minimumValue = default(T);
public bool IsInRange(T value)
{
return (value >= _minimumValue); // <-- Error here
}
}
오류는 다음과 같습니다.
'> ='연산자는 'T'및 'T'유형의 피연산자에 적용 할 수 없습니다.
도대체 뭐야!? T
이미 구속되고 IComparable
, 가치 유형 (에 제약 경우에도 where T: struct
), 우리는 여전히 연산자 중 하나를 적용 할 수 없습니다 <
, >
, <=
, >=
, ==
또는 !=
. (I는 관련된 그 해결 방법을 알고 Equals()
존재를 ==
하고 !=
있지만, 관계 연산자에 대한 도움말을하지 않습니다).
따라서 두 가지 질문이 있습니다.
- 이 이상한 행동을 관찰하는 이유 는 무엇 입니까? 어떻게하는 일반적인 유형의 값 비교에서 우리를 유지 알려진 수를
IComparable
? 일반 제약의 전체 목적을 어떻게 든 무너 뜨리지 않습니까? - 이 문제를 해결하거나 최소한 해결하려면 어떻게해야합니까?
(이 겉보기에 간단한 문제와 관련된 몇 가지 질문이 이미 있다는 것을 알고 있지만 스레드 중 어느 것도 철저하거나 실행 가능한 답변을 제공하지 않으므로 여기에 있습니다.)