Ошибка при назначении делегата? : Синтаксис - PullRequest
4 голосов
/ 26 февраля 2011

Я создал делегат и два подходящих метода.

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, чтобы выполнить это назначение, и оно работает просто отлично.Но я не понимаю, почему я не могу использовать более компактную версию, и я не понимаю сообщение об ошибке.Кто-нибудь знает значение этой ошибки?

Ответы [ 2 ]

7 голосов
/ 26 февраля 2011

Типы в условном операторе разрешаются до назначения, поэтому компилятор не может использовать тип в назначении для разрешения условного оператора.

Просто приведите один из операндов к CharComparer, такчто компилятор знает, что использовать этот тип:

CharComparer isEqual = ignoreCase ? (CharComparer)CharCompareIgnoreCase : CharCompare;
2 голосов
/ 26 февраля 2011

Попробуйте следующее:

CharComparer isEqual = (ignoreCase) ? new CharComparer(CharCompareIgnoreCase) : new CharComparer(CharCompare);
...