【问题标题】:dynamic with ternary operator动态与三元运算符
【发布时间】:2014-01-08 12:25:38
【问题描述】:

为什么以及如何在下面的代码中工作

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");
        }
    }

【问题讨论】:

  • 您遇到什么错误?至少我会尝试添加一些括号,以使代码更具可读性。

标签: c# c#-4.0 dynamic


【解决方案1】:

这与动态无关。这是因为在您的情况下,返回类型与 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' 之间没有隐式转换

对于Ternary Operator

first_expression 和 second_expression 的类型必须是 相同,或者必须存在从一种类型到另一种类型的隐式转换。

【讨论】:

    猜你喜欢
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 2021-05-12
    • 2017-09-27
    • 2011-06-17
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多