4

デリゲートと 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;

エラーが発生します:

「メソッド・グループ」と「メソッド・グループ」の間に暗黙的な変換がないため、条件式のタイプを判別できません

通常のif ... elseステートメントを使用してこの割り当てを行うことができ、問題なく機能します。しかし、よりコンパクトなバージョンを使用できない理由と、エラー メッセージがわかりません。このエラーの意味を知っている人はいますか?

4

2 に答える 2

7

条件演算子の型は代入の前に解決されるため、コンパイラは代入の型を使用して条件演算子を解決できません。

CharComparerコンパイラがその型を使用することを認識できるように、オペランドの 1 つをキャストするだけです。

CharComparer isEqual = ignoreCase ? (CharComparer)CharCompareIgnoreCase : CharCompare;
于 2011-02-26T16:19:52.027 に答える
2

以下を試してください:

CharComparer isEqual = (ignoreCase) ? new CharComparer(CharCompareIgnoreCase) : new CharComparer(CharCompare);
于 2011-02-26T16:16:44.087 に答える