Условный оператор, общий делегат, ненужное приведение

У меня действительно странная проблема с условным оператором при установке Action значение. Дело не в том, что я не знаю, как обойти это, поскольку это довольно легко решить, используя обычный if .

Вот моя проблема:

public class Test
{
    public bool Foo { get; set; }
    public Action<bool> Action { get; set; }

    public void A()
    {
        Action = Foo ? B : C;//Gives compiler error
    }

    public void B(bool value)
    {

    }

    public void C(bool value)
    {

    }
}

Это дает мне ошибку компилятора с сообщением

Нет неявного преобразования между «группой методов» и «группой методов».

Что странно, поскольку я не могу понять, почему это было бы незаконным.

Между прочим, приведенный ниже синтаксис сделает это действителен (с точки зрения компилятора):

    public void A()
    {
        Action = Foo ? (Action<bool>) B : C;
    }

Так что, возможно, вы можете прочитать вопрос, почему необходимо приведение?

8
задан thekip 16 August 2011 в 14:04
поделиться