私はデリゲートと2つの一致するメソッドを作成しました。私は、次の構文を使用してデリゲートにこれらのメソッドのいずれかを割り当てるしようとすると代理人を使用して代理人を割り当てるエラー? :構文
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
ステートメントを使用することができますし、それだけで正常に動作します。しかし、私はなぜよりコンパクトなバージョンを使用することはできませんし、私はエラーメッセージを理解していない理解できません。誰もがこのエラーの意味を知っていますか?次
まあ、確かにそれを修正します。
ただ、コンパイラはその型を使用することを知っているのでCharComparer
にオペランドの1をキャスト。しかし、条件付き演算子のタイプが代入のタイプに関係しているかどうかはまだ分かりません。 –@Jonathan:コンパイラは、 'x? y:z'式* first *を使って、割り当てを見ることができます。あなたの例では、これを行うことはできません。 – Timwi
私は問題は、 'CharCompareIgnoreCase'は' CharCompareIgnoreCase'であり、 'CharComparer'ではないと思います。これは 'CharComparer'にキャストされますが、実際にはそのタイプではありません。コンパイラはそれを見て、 'CharCompareIgnoreCase'に' CharCompare'をキャストしようとします。これは明らかに失敗します。キャストを 'CharCompare'に強制することにより、コンパイラは「ああ、大丈夫」になります。その型を 'CharCompare'として受け取ります。 –