Mam naprawdę dziwny problem z instrukcją warunkową podczas ustawiania wartości Action<T>
. Nie chodzi o to, że nie wiem, jak sobie z tym poradzić, ponieważ jest to całkiem łatwe do rozwiązania przy użyciu zwykłego if
.Polecenie warunkowe, delegat ogólny niepotrzebny rzut
Oto mój problem:
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)
{
}
}
To daje mi błąd kompilacji z komunikatem
Nie ma niejawna konwersja między „grupą metoda” i „grupy metoda”.
Co jest dziwne, ponieważ nie rozumiem, dlaczego byłoby to nielegalne.
Nawiasem mówiąc, składnia poniżej uczyni to ważne (z punktu widzenia kompilatory):
public void A()
{
Action = Foo ? (Action<bool>) B : C;
}
Więc może można przeczytać na pytanie, dlaczego jest obsada konieczne?
Myślałem, że kompilator C# jest wystarczająco inteligentny, aby sprawdzić ... –