을 감안할 때 두 가지 구현 :조건부 연산자와 비교 위임 비교 방법의
// compares by Key...
private static int CompareByKey(KeyValuePair<int, string> x, KeyValuePair<int, string> y)
{
return x.Key.CompareTo(y.Key);
}
// compares by Value...
private static int CompareByValue(KeyValuePair<int, string> x, KeyValuePair<int, string> y)
{
return x.Value.CompareTo(y.Value);
}
것없는 다음과 같은 조건 연산자 코드 블록 컴파일 이유 :
Comparison<KeyValuePair<int, string>> sortMethod;
sortMethod = isSortByActualValue ? CompareByKey : CompareByValue;
컴파일러 오류 : "조건식의 종류는 할 수 없습니다 '방법 그룹'과 '방법 그룹'간에 암시 적 변환이 없기 때문에 결정할 수 있습니다.
그러나 if-else d를 사용하는 등가 코드 블록 히어로 어떤 문제가 없습니다 :
Comparison<KeyValuePair<int, string>> sortMethod;
if (isSortByActualValue)
sortMethod = CompareByKey;
else
sortMethod = CompareByValue;
(위의 두 과제의 모든 좋은)
그래서 조건 연산자 내가 비교 위임 캐스트 경우, 수행합니다
Comparison<KeyValuePair<int, string>> sortMethod;
sortMethod = isSortByActualValue ? (Comparison<KeyValuePair<int, string>>) CompareByKey : CompareByValue;
합니다 (모든 좋은 캐스팅이 실제 부품에만있는 경우에도 캐스팅 한 경우)
CompareByAcutalValue 및 CompareByDisplayValue는 어떻게 정의됩니까? CompareByKey 및 CompareByValue에 대한 정의 만 표시합니다. –
내 게시물의 코드 스 니펫이 명확하게 편집되었습니다. 나는 (메소드의) 이름을 부분적으로 만 변경했다는 것을 깨닫지 못했습니다. Thanks Eric, CompareByActualValue에 대한 모든 참조를 CompareByKey (및 CompareByDisplayValue를 CompareByValue)로 업데이트했습니다. – Arun