Cho hai triển khai các phương pháp so sánh:nhà điều hành có điều kiện và so sánh Đại biểu
// 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);
}
Tại sao không phải là điều kiện điều hành khối mã biên dịch sau:
Comparison<KeyValuePair<int, string>> sortMethod;
sortMethod = isSortByActualValue ? CompareByKey : CompareByValue;
biên dịch báo lỗi: "Loại biểu thức điều kiện không thể được xác định vì không có chuyển đổi tiềm ẩn giữa 'nhóm phương pháp' và 'nhóm phương pháp' "
Tuy nhiên, khối mã tương đương sử dụng if-else d oes không có bất kỳ vấn đề:
Comparison<KeyValuePair<int, string>> sortMethod;
if (isSortByActualValue)
sortMethod = CompareByKey;
else
sortMethod = CompareByValue;
(tất cả đều tốt trong cả hai bài tập trên)
Vì vậy, hiện các nhà điều hành có điều kiện, nếu tôi đúc các đại biểu So sánh:
Comparison<KeyValuePair<int, string>> sortMethod;
sortMethod = isSortByActualValue ? (Comparison<KeyValuePair<int, string>>) CompareByKey : CompareByValue;
(tất cả tốt trong phân công ở trên, khi truyền ngay cả khi truyền chỉ ở phần thực)
CompareByAcutalValue và CompareByDisplayValue được xác định như thế nào? Bạn chỉ hiển thị định nghĩa cho CompareByKey và CompareByValue. –
Đoạn mã trong bài đăng của tôi đã được chỉnh sửa để rõ ràng. Tôi đã không nhận ra rằng tôi đã thay đổi tên (của phương pháp) chỉ một phần. Cảm ơn Eric, tôi đã cập nhật tất cả các tham chiếu đến CompareByActualValue để CompareByKey (và CompareByDisplayValue thành CompareByValue). – Arun