为什么以及如何在以下代码中使用
dynamic x = ( c== 'a') ? new D1() :x= new D2();
但不是这个
dynamic x = ( c== 'a') ? new D1() : new D2();
代码
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");
}
}
答案 0 :(得分:3)
这与动态无关。这是因为在你的情况下,返回类型与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'之间没有隐式转换
first_expression和second_expression的类型必须是 相同,或者必须存在从一种类型到另一种类型的隐式转换。