我在设置 Action<T>
值时,遇到了一个非常奇怪的条件语句问题。虽然使用普通的 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;
}
也许你可以把这个问题理解为,为什么需要使用cast呢?