2017-01-31 5 views
0

다양한 기능에 의해 비교 : 나는 기능 GetValue()를 선택하고자 할 때 () - 내가 지금처럼 <code>CompareTo()</code>을 구현

public override int CompareTo(object obj) 
{ 
    //quick failsafe 
    MyClass other; 
    if (obj is MyClass) 
    { 
    other = obj as MyClass; 
    } 
    else 
    { 
    return 1; 
    } 
    //now we should have another comparable object. 
    /* 
    * 1: this is greater. 
    * 0: equals. 
    * -1: this is less. 
    */ 
    if (other.GetValue() < this.GetValue()) 
    { 
    // this is bigger 
    return 1; 
    } 
    else if (other.GetValue() > this.GetValue()) 
    { 
    //this is smaller 
    return -1; 
    } 
    else 
    { 
    return 0; 
    } 
} 

그러나 상황이 흥미로운 얻을. 그 중 몇 가지를 설정했습니다. 즉 Average(), Best(), CorrectedAverage(), Median()입니다. 나는 floats 배열을 비교합니다. 나는이 클래스에서 정의한 enumswitch-case을 사용하고 싶지 않습니다. 무엇을 주문해야하는지 알려줍니다. 어떤 기능을 좋고 깨끗하게 주문할 것인지 결정하는 방법이 있습니까?

답변

2

클래스에 여러 가지 다른 비교 방법이 있으므로 거의 IComparable에 구현하면 안됩니다.

대신 개체 비교 방법에 따라 IComparer<T> 개의 인스턴스를 만듭니다. 해당 유형의 인스턴스를 비교하려는 사람은 자신의 상황에 가장 적합한 비교를 사용하는 비교자를 선택할 수 있습니다.

+0

도움 주셔서 감사합니다. 무슨 뜻인지 힌치가 있지만 좀 더 설명해 주시겠습니까? 내말은, 어떻게하는거야? – hei

+0

@hei 오브젝트를 비교할 때마다 IComparer 을 구현하는 클래스를 생성합니다. 각 개체는 서로 다른 방식으로 비교합니다. 이러한 객체를 비교하는 방법 (예 : 정렬 작업)을 알아야하는 작업을 수행하려는 사용자는 상황에 적합한 비교자를 사용할 수 있습니다. 만약 그들이 평균값을 사용하여 비교하기를 원한다면, 그들은'MedianComparer'를 사용합니다. 평균을 사용하여 비교하기를 원한다면 그들은'MeanComparer'를 사용합니다. – Servy

+0

그래서 4 "CompareTo()"함수가 있습니까? 그리고 나는 더 많이 또는 더 적은 복사 - 붙여 넣기, 그냥 GetValue() 대신 다른 기능을 사용하십시오 – hei