2009-10-19 1 views
0

경우 예외가 발생합니다 하나의 개체 필요 첫 입력이 구현할 것을 요구할 것이다. 비교할 수 없다. 다음 코드는 오류를 생성합니다 :Comparer.Compare은에서 IComparable을 구현하지만 첫 번째 매개 변수가 말한다 비교 자 클래스의 비교 기능에 대한 문서에서

class Program 
{ 
    static void Main(string[] args) 
    { 
     Test t1 = new Test(); 
     Test2 t2 = new Test2(); 

     int i = Comparer.Default.Compare(t1,t2); 

    } 
} 

class Test 
{ 
} 

class Test2 : IComparable 
{ 
    public int CompareTo(object obj) 
    { 
     return 0; 
    } 
} 

나만이나 문서가 잘못 되었나요?

답변

2

Refector는 IComparable을 구현하는 경우에만 검사를 수행한다고 말합니다.

public int Compare(object a, object b) 
{ 
if (a == b) 
{ 
    return 0; 
} 
if (a == null) 
{ 
    return -1; 
} 
if (b == null) 
{ 
    return 1; 
} 
if (this.m_compareInfo != null) 
{ 
    string str = a as string; 
    string str2 = b as string; 
    if ((str != null) && (str2 != null)) 
    { 
     return this.m_compareInfo.Compare(str, str2); 
    } 
} 
IComparable comparable = a as IComparable; 
if (comparable == null) 
{ 
    throw new ArgumentException(Environment.GetResourceString("Argument_ImplementIComparable")); 
} 
return comparable.CompareTo(b); 

}

+1

여기 당신이 할 수있는 단지 포스트 디 컴파일 proprietry 소스 너무 확실하지 않다. – Joren