Добавление string
к чему-либо в .NET вызовет метод этой вещи .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);