【发布时间】:2012-03-18 07:17:03
【问题描述】:
给出两种比较方法的实现:
// 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 的等效代码块没有任何问题:
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 的定义。
-
为了清晰起见,我对我帖子中的代码 sn-p 进行了编辑。我没有意识到我只是部分更改了(方法的)名称。感谢 Eric,我已将所有对 CompareByActualValue 的引用更新为 CompareByKey(并将 CompareByDisplayValue 更新为 CompareByValue)。
标签: c# .net visual-studio ternary-operator conditional-operator