Dynamic и var представляют две совершенно разные идеи.
вар
Var по сути просит компилятор выяснить тип переменной на основе выражения в правой части оператора присваивания. Переменная затем обрабатывается точно так, как если бы она была явно объявлена как тип выражения. Например, следующие два утверждения эквивалентны
var a = "foo";
string a = "foo";
Ключ, который нужно убрать, заключается в том, что «var» является 100% безопасным типом и является операцией времени компиляции
динамическая
Dynamic во многих отношениях является полной противоположностью var. Использование динамического по существу устраняет все типы безопасности для конкретной переменной. Это во многом не имеет типа. Когда вы вызываете метод или поле для переменной, определение того, как вызвать это поле, происходит во время выполнения. Например
dynamic d = SomeOperation();
d.Foo(); // Will this fail or not? Won't know until you run the program
Ключевым моментом здесь является то, что «dynamic» не является безопасным типом и является операцией во время выполнения