更新时间:2022-10-15 11:46:49
dynamic
might simplify a limited number of reflection scenarios (where you know the member-name up front, but there is no interface) - in particular, it might help with generic operators (although other answers exist) - but other than the generic operators trick, there is little crossover with generics.
Generics allow you to know (at compile time) about the type you are working with - conversely, dynamic
doesn't care about the type.
In particular - generics allow you to specify and prove a number of conditions about a type - i.e. it might implement some interface, or have a public parameterless constructor. dynamic
doesn't help with either: it doesn't support interfaces, and worse than simply not caring about interfaces, it means that we can't even see explicit interface implementations with dynamic
.
Additionally, dynamic
is really a special case of object
, so boxing comes into play, but with a vengence.
In reality, you should limit your use of dynamic
to a few cases:
For all other cases, generics and regular C# are the way to go.