我已經創建了一個委託和兩個匹配的方法。錯誤分配委託使用? :語法
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'。 –