It is not a new feature anymore, but I realized few of my friends still do not know the benefits and need of it. Thus, I feel it is worth writing. This post may not be helpful for you experts!!!
Example to start of with and put few questions
public void ImplicitVars()
{
var i = 0;
var s = "Do I know";
Console.WriteLine("i is of type {0}",i.GetType().FullName);
Console.WriteLine("s is of type {0}",s.GetType().FullName);
}
Output
i is of type System.Int32
s is of type System.String
Now add another line after second Console.WriteLine - i = "Error";
public void ImplicitVars()
{
var i = 0;
var s = "Do I know";
Console.WriteLine("i is of type {0}",i.GetType().FullName);
Console.WriteLine("s is of type {0}",s.GetType().FullName);
i = "Error";
}
We will get a compile time error. “Cannot implicitly convert type string to int.
This means that
1. Type of a “Implicitly typed local variable” is resolved by the compiler at compilation itself (NOT AT RUNTIME).
2. var DOES NOT mean variant and thus we can not assign different types to same variable.
The question is Why do we need “Implicitly typed local variable” if they are acting just like explicitly typed variables.
Usage
‘var’ is useful when we are working with anonymous types and when we are using LINQ.
Anonymous Types
var v = new { Name = “Anuj”, Age = 26};
Console.WriteLine(“Name : {0}” + Environment.NewLine + “Age : {1}”,v.Name,v.Age);
LINQ
var studentQuery = from student in students where student.Age > 20 select student;
Here “students” is a collection of student type objects. We can very well use foreach on the collection by declaring the variable explicitly but we are using LINQ to write more concise code. So it is up to you to decide what to use, we are really not getting anything extra by using var.
List<student> objStudent = students;
foreach(student s in students)
{
if(s.Age > 20)}
{
Do something….
}
we have not got any collection so either we need to declare a variable or need to perform action there only (Do something..).
Restrictions
We can not use var while declaring data members at class level. Which is logically correct as with members we define a contract for the object we are going to get and operations we can perform.
Thus we can use only while declaring local variables (inside a function).
Comments
Post a Comment