The dynamic keyword declares a variable whose type is not known at compile time. A dynamic variable can contain any value, and the type of the value can change during runtime.
As noted in the book "Metaprogramming in .NET", C# does not have a backing type for the dynamic keyword:
The functionality enabled by the dynamic keyword is a clever set of compiler actions that emit and use CallSite objects in the site container of the local execution scope. The compiler manages what programmers perceive as dynamic object
references through those CallSite instances. The parameters, return types, fields, and properties that get dynamic treatment at compile time may be marked with some metadata to indicate that they were generated for dynamic use, but the underlying data type for them will always be System.Object.
Creating a dynamic object with properties
Creating a dynamic variable
Handling Specific Types Unknown at Compile Time
The following output equivalent results:
The advantage to the dynamic, is adding a new Type to handle just requires adding an overload of DebugToStringInternal of the new type. Also eliminates the need to manually cast it to the type as well.
This modified text is an extract of the original Stack Overflow Documentation created by following contributors and released under CC BY-SA 3.0