我已经创建了一个委托和两个匹配的方法。错误分配委托使用? :语法
private delegate bool CharComparer(char a, char b);
// Case-sensitive char comparer
private static bool CharCompare(char a, char b)
{
return (a == b);
}
// Case-insensitive char comparer
private static bool CharCompareIgnoreCase(char a, char b)
{
return (Char.ToLower(a) == Char.ToLower(b));
}
当我尝试分配或者使用下面的语法这些方法的委托(注意,此代码是在同一类的静态方法):
CharComparer isEqual = (ignoreCase) ? CharCompareIgnoreCase : CharCompare;
我得到的错误:
Type of conditional expression cannot be determined because there is no implicit conversion between 'method group' and 'method group'
我可以使用常规的if ... else
语句来完成这项任务,它工作得很好。但我不明白为什么我不能使用更紧凑的版本,我不明白错误信息。有谁知道这个错误的含义?
嘛,那肯定修复它。但是我仍然没有看到条件运算符的类型与赋值类型有什么关系。 –
@Jonathan:编译器需要解析'x? y:z'表达式* first *,然后才可以查看分配。在你的例子中,它不能做到这一点。 – Timwi
我认为问题是'CharCompareIgnoreCase'的类型是'CharCompareIgnoreCase',而不是'CharComparer'。它转换为'CharComparer',但实际上不是那种类型。所以,编译器看到了这一点,并试图将'CharCompare'强制转换为'CharCompareIgnoreCase',这显然失败了。通过强制将Cast转换为“CharCompare”,编译器执行“哦,好吧。”并接受类型为'CharCompare'。 –