На первый взгляд, dynamic в C# — просто object с поддержкой машинерии компилятора. Но не совсем. Ядром времени выполнения является DLR (Dynamic Language Runtime) — подсистема/фреймворк для поддержки динамических языков программирования. Существует реализация под собственно C#, который идет в поставке с .NET, и отдельная для Iron-языков. Когда мы работаем с обобщениями (generics), то CLR имеет свои оптимизации на предмет специализации оных. В тот момент, когда CLR+DLR должны работать с generics вместе, **поведение** написанного кода может стать **непредсказуемым**. [Читать дальше →][1]
[1]:
https://habrahabr.ru/post/281274/#habracut