为什么以及如何在下面的代码中工作
dynamic x = ( c== 'a') ? new D1() :x= new D2();
但不是这个
dynamic x = ( c== 'a') ? new D1() : new D2();
Code
class Program
{
static void Main(string[] args)
{
var c = Console.ReadKey().KeyChar;
dynamic x = ( c== 'a') ? new D1() :x= new D2();
x.Print();
Console.ReadKey();
}
}
class D1
{
public void Print()
{
Console.WriteLine("D1");
}
}
class D2
{
public void Print()
{
Console.WriteLine("D2");
}
}
这与动态无关。这是因为在您的情况下,返回类型与 Else 的情况不同。
如果你改写这个语句,你仍然会得到同样的错误。
var x = (c == 'a') ? new D1() : new D2();
但是,如果您编写以下代码,您就会成功。
var c = 'd';
int a = 5;
decimal d = 6m;
decimal x = (c == 'a') ? a : d;
如果您查看收到的错误,它会告诉您同样的事情。
无法确定条件表达式的类型,因为有
“D1”和“D2”之间没有隐式转换
And For 三元运算符
第一个表达式和第二个表达式的类型必须是
相同,或者必须存在从一种类型到另一种类型的隐式转换。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)