Note :- Comparing VAR and Dynamic keyword is like comparing Apples and oranges. Many people confuse VAR with the variant datatype of VB6 and there’s where interviewer tries to confuse you. But there is absolute no connection of var c# keyword with variant of VB6.
Var is early binded (statically checked) while dynamic is late binded (dynamically evaluated).
Var keyword looks at your right hand side data and then during compile time it decides the left hand data type.In other words var keyword just saves you typing lot of things.
On the other hand dynamic keyword is for completely different purpose. Dynamic objects are evaluated during runtime. For instance in the below code the “Length” property exists or not is evaluated during runtime.
dynamic z = "Dynamic";
y = z.Length; // Is Length present or not checked during runtime
If for some reason you mistype the “Length” property to “length” (Small “l“) you would end up in to a runtime exception as shown in the below figure.
So in short sentence Var does static check while dynamic evaluates and checks during runtime.