2014-04-15 3 views
13

대신 TimeSpan.CompareTo()를 사용하는 이유 Kinect 센서에 대한 Microsoft의 일부 샘플 코드를 살펴보고 다음 줄을 발견했습니다. < > 또는 =

TimeSpan zeroDuration = TimeSpan.FromSeconds(0.0); 
TimeSpan timeRemaining = ...; 

if (timeRemaining.CompareTo(this.zeroDuration) > 0) 
{ 
} 

나는 CompareTo()는 정렬하지만 왜 대신 더 직접적인 접근 방식의 조건부 if()에 사용되는 같은 시나리오에서 유용 방법을 이해?

if (timeRemaining > this.zeroDuration) 
{ 
} 

추신 :이 다른 소스로부터했지만 코드의 일반적인 품질가 주어진다면 나는

+0

나는 단지 문체의 차이입니다 가정 싶지만, 내가 잘못 될 수 있습니다. @Amicable은 주로'>'와'CompareTo'가 아닌 다른 평등 비교에 관한 것입니다. –

+0

TimeSpans의 경우에는 차이점이 없습니다. 내 생각 엔 샘플 dev은 과부하 연산자가 존재한다는 것을 알지 못했다. –

+1

@Amicable null은 문자열 앞에 오며 CultureInfo.CurrentCulture.CompareInfo.Compare를 사용합니다. 즉 문화권에 따른 비교를 사용합니다. 이것은 ß가 독일의 SS와 동등하거나 그와 비슷할 수도 있음을 의미 할 수 있습니다. - TimeSpan –

답변

12

모두 내부적으로이 같은 일을하는 이유가 가정 에누리 걸릴 것입니다. Ticks을 비교하고 결과를 반환하십시오.

public int CompareTo(TimeSpan value) { 
    long t = value._ticks; 
    if (_ticks > t) return 1; 
    if (_ticks < t) return -1; 
    return 0; 
} 

public static bool operator <(TimeSpan t1, TimeSpan t2) { 
      return t1._ticks < t2._ticks; 
} 

유일한 이유 null위한 object 타입 파라미터를 수신 확인하고 비교하기위한 다른 CompareTo 과부하 될 수있다. 에서

public int CompareTo(Object value) { 
      if (value == null) return 1; 
      if (!(value is TimeSpan)) 
       throw new ArgumentException(Environment.GetResourceString("Arg_MustBeTimeSpan")); 
      long t = ((TimeSpan)value)._ticks; 
      if (_ticks > t) return 1; 
      if (_ticks < t) return -1; 
      return 0; 
     } 

소스 코드 :처럼 구현 Reference Source .NET Framework 4.5.1 - Microsoft

+1

그것이 내 자신의 대답을 찾고있는 링크입니다! +1 – BlackBear

관련 문제