paq*_*mez 3 c# if-statement ternary-operator
请考虑以下不编译的代码:
class WhyNot
{
private Action _doSomething;
public bool ThisOrThat;
public WhyNot()
{
_doSomething = ThisOrThat ? DoThis : DoThat;
}
private void DoThis()
{}
private void DoThat()
{}
}
Run Code Online (Sandbox Code Playgroud)
我知道这不起作用,因为方法本身并不具有类型,而代理则这样做,因此必须进行显式强制转换.
_doSomething = ThisOrThat ? (Action)DoThis : (Action)DoThat;
Run Code Online (Sandbox Code Playgroud)
我不遵循的是为什么标准if语句成功地在三元运算符失败的情况下转换它们?
if (ThisOrThat)
_doSomething = DoThis;
else
_doSomething = DoThat;
Run Code Online (Sandbox Code Playgroud)
为什么运营商之间存在差异?
为什么在条件运算符中需要显式强制转换
_doSomething = ThisOrThat ? DoThis : DoThat;
Run Code Online (Sandbox Code Playgroud)
从这个答案从乔恩斯基特:
作为表达.那是什么类型的?方法组应转换为什么委托类型?编译器无法知道.如果您转换其中一个操作数,编译器可以检查是否可以转换另一个操作数
对于你的问题:
为什么在
if声明中允许它
您正在进行一个简单的分配,其中左侧是Action,右侧是方法组.存在隐式转换
请参阅赋值运算符(=)C#
赋值运算符(=)将其右侧操作数的值存储在由其左侧操作数表示的存储位置,属性或索引器中,并将该值作为结果返回.操作数必须是相同的类型(或者右操作数必须可以隐式转换为左操作数的类型)