주어진 개체가 null
일 때 CompareTo
메서드에서 반환 할 내용은 무엇입니까?Override CompareTo : null의 경우 어떻게해야할까요?
MSDN Library은 1
이 반환되는 예제를 보여줍니다. 그러나 null
과 비교할 수 없으므로 오류가 발생할 것으로 예상됩니다.
나는이 답변과는 다른 의견을 기대합니다. 가장 좋은 방법은 무엇입니까?
주어진 개체가 null
일 때 CompareTo
메서드에서 반환 할 내용은 무엇입니까?Override CompareTo : null의 경우 어떻게해야할까요?
MSDN Library은 1
이 반환되는 예제를 보여줍니다. 그러나 null
과 비교할 수 없으므로 오류가 발생할 것으로 예상됩니다.
나는이 답변과는 다른 의견을 기대합니다. 가장 좋은 방법은 무엇입니까?
예, 좋습니다. 다른 대답이 말하는 것과는 달리, 가장 인기있는 행동이 아니라 예상되는 표준이 있습니다.
정답은 IComparable<T>.CompareTo
및 IComparable.CompareTo
대한 MSDN 문서에 주어진다 정의에
은 개체보다 큰 널 및 참조 서로 동일 비교 두 널을 비교한다.
(계약 상이 큰 비교는 다음과 같이 정의된다. a > b
다음 a.CompareTo(b) > 0
경우)
이 예상되는 동작은 예를 들면 Nullable.Compare<T>
확증된다. Null은 항상 값보다 작은 것으로 비교됩니다.
매개 변수, OBJ는, 클래스 또는 값 형식 와 동일한 유형이어야합니다
또한 제네릭이 아닌 비교를 위해, 일치하지 유형이 null로 취급되어서는 안된다는 지적 가치 이 인터페이스를 구현하는; 그렇지 않으면 ArgumentException이 입니다.
이 귀하의 질문에 영향을 미칠하지만 인식하지 않는
,Nullable<T> comparison operators
(==
, !=
, <
, <=
, >
, >=
)는 IComparable
규칙을 따르지 않습니다. Null 허용 유형 중 하나 의 값이 널 (null)이고 다른 하나는없는 경우
당신은 nullable 형식으로
!=
(같지 않음)을 제외하고false
로 평가 모든 비교를 비교를 수행합니다. 은 특정 비교가false
을 반환하므로 대소 문자는true
을 반환한다고 가정하십시오. 다음 예에서 10은 이 아니며,보다 작거나 같지 않으며 null이 아닙니다.num1 != num2
만true
으로 평가됩니다.
(int?)null == (int?)null
이 사실로 평가되는 이상한 결과가 있지만 (int?)null <= (int?)null
은 그렇지 않습니다.
선택 사항은 귀하의 것입니다. 내가 무언가를 비교할만한 유스 케이스를 상상할 수있는 가능성을 넘어서서, "무언가"를 더 크게 보길 원합니다. 하지만 그게 당신이 그것을 무시하는 이유입니다, 그래서 당신은 당신이 그 사건을 어떻게 처리 할지를 결정할 수 있습니다.
가장 좋은 방법은 특정 사례에 따라 달라집니다. 비교 대상에 따라 null
을 비교하는 것이 가능할 수 있습니다.
null
이 어떤 비교에서도 가능한 가장 낮은 값인 개체를 정의하면 null
과 비교하면 분명히 정의가 가능하며 잘 정의 된 결과를 얻습니다. 다른 경우에는 예외를 throw하는 것이 더 합리적 일 수 있습니다.
궁극적으로 이것은 반드시 (단지 주관적 인) 디자인 질문이며, 반드시 하나의 대답은 아닙니다.
null 인수가있는 CompareTo는 항목이 null 인 목록을 정렬하는 경우에 영향을줍니다. 지정된 객체가 null 인 경우에 1을 돌려 주면 (자), 소트시에리스트의 맨 위에 null가 표시되어 가장 인기가있는 동작입니다.
null과 비교하면 "불가능"하다는 것을 의미합니까? 모든 참조 유형은 null과 정상적으로 비교 될 수 있습니다. 그렇지 않으면 [Nullable 클래스] (http://msdn.microsoft.com/en-us/library/system.nullable.aspx)로 랩핑 할 수 있습니다. – Renan
"다른 의견을 원한다면"이것은 스택 오버플로에 적합하지 않으므로 FAQ에서 "주관적인 질문을 피하지 않으면 안됩니다"라는 명확한 통계가 나와 있습니다. –
예제가 유효합니다. CompareTo가 객체의 정렬 순서를 반환하기 때문에 null을 첫 번째 요소 – NoviceProgrammer