我已创建了一个委托和两个相应的方法。
当我尝试使用以下语法(请注意,此代码位于同一类的静态方法中)将其中任何一个方法分配给委托时:
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;
我遇到了一个错误:
由于'method group'和'method group'之间没有隐式转换,无法确定条件表达式的类型
我可以使用常规的if...else
语句进行分配,它可以正常工作。但是我不明白为什么不能使用更简洁的版本,并且我也不理解这个错误消息的含义。有人知道这个错误的含义吗?
x ? y : z
表达式的类型,然后才能查看赋值。在您的示例中,它无法执行此操作。 - TimwiCharCompareIgnoreCase
的类型是CharCompareIgnoreCase
,而不是CharComparer
。它进行强制类型转换到CharComparer
,但实际上并不是那种类型。因此,编译器会看到这一点,并尝试将CharCompare
强制转换为CharCompareIgnoreCase
,显然会失败。通过强制将Cast转换为CharCompare
,编译器就会接受类型作为CharCompare
。 - Mike CaronCharCompareIgnoreCase
不会自动转换为CharComparer
类型。只有当我将它分配给该类型的委托或进行类型转换时,它才会成为该类型。 - Jonathan Wood