的比較方法給定兩個實現:條件運算符和比較代表
// 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 OES沒有任何問題:
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的定義。 – 2012-02-28 19:30:37
我發佈的代碼片段是爲了清晰起見而編輯的。我沒有意識到我只是部分改變了方法的名稱。感謝Eric,我已經將CompareByActualValue的所有引用更新爲CompareByKey(並將CompareByDisplayValue更新爲CompareByValue)。 – Arun 2012-02-28 19:42:23