이 틀림 인위적인 일반 정의를 생각해이 "일반 방법"은 어떤 "where"절이 작동하게합니까?
private void Foo<T,BASETYPE>(PropertyInfo prop, BASETYPE o1, BASETYPE o2)
{
T value1 = (T) prop.GetValue(o1, null);
T value2 = (T) prop.GetValue(o2, null);
if (value1 != value2)
Console.WriteLine("NOT EQUAL");
}
소품이 baseType 여기서위한 PropertyInfo로 보장됩니다.
가 나는 경우() 문에서 컴파일 오류가 점점 오전 : "일반 케이스"내가 오류 메시지가 유효하다는 것을 이해하지만
이Operator '!=' cannot be applied to operands of type 'T' and 'T'
는,이 경우에, 난 단지에 대한 루틴을 원하는 표준 형식 중 일부 : System.Int64, System.String 등 == 및! = 연산자를 모두 지원합니다.
"where"절로 수정 될 수 있다고 가정하지만 IComparable과 IEqualable은 도움이되지 않습니다.
올바른 "where"절이 누구인지 아시겠습니까?
프랭크
이 코드가 필요 이상 더 구체적이다. 'IEquatable' 만 있으면됩니다. – luqui
이것은 IComparable의 주문 기능이 실제로 필요하지 않을 때 유형에 대한 불필요한 제한 사항처럼 보입니다. –
@Matt @luqui - 두 인터페이스가 선택을 제한하지 않습니까? 나는 당신이 IEquatable이 비교를위한 것이라는 것에 모두 동의하고, IComparable은 정렬을위한 것이라고 생각한다. 당신의 타입이 하나가 아니라 다른 것을 구현한다면 당신은 무슨 일이 있어도 당신의 사용 가능한 객체들을 필터링하게 될 것입니다. –