C# is very rich in data type. It provides data type like Object, var and dynamic which can be used to store any type of data.
In this post, I would like to explain the differences between var and dynamic data types along with some examples on their behavior.
| Var | Dynamic |
| Introduced with C# 3.0 | Introduced with C# 4.0 |
| It can store any type of value but It is mandatory to initialize var types at the time of declaration. | It can store any type of the variable, similar to old VB language variable. |
| It is type safe i.e. Compiler has all information about the stored value, so that it doesn't cause any issue at run-time. | It is not type safe i.e. Compiler doesn't have any information about the type of variable. |
| Var type cannot be passed as method argument and method cannot return object type. Var type work in the scope where it defined. | Dynamic type can be passed as method argument and method also can return dynamic type. |
| Casting is not required as compiler has all information to perform operations. | Casting is not required but you need to have the details of the properties and methods related to stored type. |
| Doesn't cause problem because compiler has all information about stored value. | Cause problem if the wrong properties or methods are accessed because all the information about stored value gets resolved only at run time. |
| Useful when we don’t know actual type i.e. type is anonymous. | Useful when we need to code using reflection or dynamic languages or with the COM objects, because you need to write less code. |
- dynamic test = 1;
- var test2=2;
- // Can I change the type of data stored in dynamic?
- dynamic test = 1;
- test = "I am a string now"; // compiles and runs just fine
- var test2 = 2;test2 = "I am a string now"; // will give compile error
I will comment out the last line in the code above to get the code to compile, and add some code to verify the types of the variables.
- // Can I change the type of data stored in dynamic?
- dynamic test = 1;
- Console.WriteLine("Dynamic as " + test.GetType() + ": " + test);
- test = "I am a string now"; // compiles and run just fine
- Console.WriteLine("Dynamic as " + test.GetType() + ": " + test);
- var test2 = 2;
- //test2 = "I am a string now"; // will give compile error
- Console.WriteLine("Var as " + test2.GetType() + ": " + test2);
Dynamic as System.Int32: 1
Dynamic as System.String: i'm a string now
Var as System.Int32: 2
What do you think?
I hope you will enjoy the details while working with Var and dynamic in C#. I would like to have feedback from my blog readers. Your valuable feedback, question, or comments about this article are always welcome.

Gowtham RajamanickamPosted Apr 8, 2016, 10:00 AM
good one..
Rajeesh MenothPosted Aug 10, 2015, 12:52 AM
Good One