使用动态将动作与字符串连接起来
本文关键字:字符串 连接 起来 动态 | 更新日期: 2023-09-27 18:14:26
我有以下c#代码:
Action a = new Action(() => Console.WriteLine());
dynamic d = a;
d += "???";
Console.WriteLine(d);
,输出为
System.Action ? ?
而如果在d中添加int而不是string,则会抛出异常。
你能解释一下为什么会这样吗?
我认为这是因为当你使用d += "???";
时,d被转换为字符串(使用默认的ToString()
方法,它接受对象名称),然后"???"被附加并写入控制台。
如果你尝试使用d += 2
,这将失败,因为没有默认的方法将Action转换为整数。
在。net中添加string
将导致该事物的.ToString
方法被调用,并将添加视为字符串连接。如果你不使用dynamic
,同样的事情也会发生。
Action a = new Action(() => Console.WriteLine());
Console.WriteLine(a + "???"); // outputs "System.Action???"
当.ToString
方法被调用时,任何Action
都将返回System.Action
。
原始示例中的+=
与本示例中的+
之间的唯一区别是您将连接的结果设置为动态变量。它相当于:
object a = new Action(() => Console.WriteLine());
a = a + "???"; // The same as: a = a.ToString() + "???";
Console.WriteLine(a);