我在C#中有以下代码:
Action a = new Action(() => Console.WriteLine());
dynamic d = a;
d += "???";
Console.WriteLine(d);
,输出
System.Action ???
如果你向d添加一个int而不是一个字符串,它会抛出异常。
你能解释一下为什么会这样吗?
答案 0 :(得分:3)
我认为这是因为当你使用d += "???";
时d被转换为字符串(使用默认的ToString()
方法,它取对象名称)然后“???”附加并写入控制台
如果您尝试使用d += 2
,则会失败,因为没有将Action转换为整数的默认方式。其他类型相同......
答案 1 :(得分:2)
向.NET中的任何内容添加string
将导致调用该事物的.ToString
方法,并将该添加视为字符串连接。如果您没有使用dynamic
,也会发生同样的事情。
Action a = new Action(() => Console.WriteLine());
Console.WriteLine(a + "???"); // outputs "System.Action???"
任何Action
在调用System.Action
方法时都会返回.ToString
。
原始示例中的+=
与此示例中的+
之间的唯一区别是您将连接的结果设置为动态变量。它等同于:
object a = new Action(() => Console.WriteLine());
a = a + "???"; // The same as: a = a.ToString() + "???";
Console.WriteLine(a);