Click here to Skip to main content
Click here to Skip to main content

Tagged as

Go to top

Best Practices on Using Implicitly Typed (i.e. var ) and Explicitly Typed Variables

, 4 Nov 2009
Rate this:
Please Sign up or sign in to vote.
Best practise using var

Introduction

Leveraging the type inference is wonderful when writing code. With the arrival of ‘var’ in C# 3.0, it now allows a developer to write more relaxed code.

int i = 2 can now be written as var i = 2, without having to worry about the overhead for boxing/un-boxing.

The compiler infers the type indicated by ‘var’ from the expression used to initialize the variable, and the IL code contains the inferred type. However, it is not always the best thing to use var. While using ‘var’ can help developers to avoid all the type declarations for local variables, it has an impact on code readability. Consider invoking an overloaded method, which differs in the parameter type. If the method is invoked with parameters declared as ‘var’, it makes the code complex to understand.

Consider the following snippet:

private int GetUserInput()
{
    Random r = new Random(1);
    return r.Next();
}

private int Add(int numberOne, int numberTwo)
{
    return numberOne + numberTwo;
}
private float Add(float numberOne, float numberTwo)
{
    return Convert.ToInt32(numberOne + numberTwo);
}

private void InvokeAdd()
{
    var numberOne = GetUserInput();
    var numberTwo = GetUserInput();
    //...
    var addedNumber = Add(numberOne, numberTwo); //version of ‘Add’ method is not evident
}

Which version of ‘Add’ method is invoked is not evident at the first glance, in the above snippet.
Although the best practices for using ‘var’ cannot be made generic but a little guidance can help in making a conscious choice. Below are a few thoughts on when to use or not to use ‘var’.

  1. Do use ‘var’ to:
    1. Refer anonymous types, e.g.
      var anonymousType = new { Name = "Dilbert" };
    2. Refer query expressions, e.g.
      var queryExpression = from c in customers where c.Name == "Dilbert" select c;
    3. Refer complex generic types, e.g.
      var searchList = new Dictionary<string>();
  2. Do not use ‘var’ to:
    1. Refer known types, e.g.

      var customer = new Customer(); //Do not use 
      var numberList = new int[] { 1, 2, 3, 4, 5 }; //Do not use.
    2. Refer constants, e.g.

      var i = 5; //Do not use
    3. Refer simple expression assignments, e.g.

      var count = customers.Count();//Do not use
      var customerName = customer.Name;//Do not use
    4. Refer variables where types cannot be inferred or where inferred type is not what is intended, e.g.

      IList<customer> customers = new List<customer />(); //Do not use

      Consider code readability and maintainability while making a choice between ‘var’ and explicit type.

History

  • 4th November, 2009: Initial post

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

ATANU.PODDER

Unknown
No Biography provided

Comments and Discussions

 
GeneralMy vote of 1 PinmemberChantiPDM14-Jan-11 5:05 
GeneralMy vote of 1 PinmemberRichard Deeming12-Nov-09 9:00 
General[My vote of 1] Мethodically, socially and morally incorrect PinmemberSAKryukov9-Nov-09 6:51 
Epigraph:
Another effective argument it to ask suddenly: “Can I see your passport?”
M. Zhvanetsky
 
The whole article is methodically, socially and morally incorrect.
The general intention is maybe quite good: there are many techniques and features around which could be abused, some others are actually abused very often, so anyone could use a good advice on “Do” vs. “Don’t” -- only if the advice is good.
 
Actually, I disagree with most of the author’s statements; for others, I can see they are pointless. But this is not a real problem. The real problem is that those statements are just claims, with not a single reasonable word said to proof or just motivate anything.
What would make the author thinking he has an authority to claim all this with no motivation?
The whole reason I even pay attention for this article is that I would like to warn the beginners from using such baseless statements in their practice. Anything needs to be proven.
 
The discussion part is much worse.
Author just provokes the readers, so it looks like we catch his lure and try to argue with someone who does not accept most basic principles of argumentation.
 
Author’s manners not just bad; they are simply anti-social. This is nothing wrong of being aggressive in the argumentation. The only problem is being correct.
 
The author accuses the opponents on the base of irrelevant matters shifting the focus from his own mistakes.
One accusation sounds “as if they are on a mission to make such comments”. Why, on what grounds? It looks like an accusation in espionage, isn’t it?
I can imagine the amount of hate I can receive for this comment.
 
Another baseless accusation assumes the voters fail to understand deep thoughts of the author. “Not getting spirit of the article”, he says, huh? Considering the fact all author's claims are as simple as a brick, this kind of playing "understanding" card looks quite offensive.
 
How about this one:
“The posters were actually, I felt, not getting spirit of the article, getting stuck 2 just 2 lines of the whole article.”
How it sounds? Like this:
“You were only 2 minutes late for you train but cry as if you were whole hour late.”
 
Finally, for the very first time I need to force myself to address directly to the author:
Do you understand that with this publication of you article and especially discussion you virtually excluded yourself from this community?
I can hardly imagine many readers considering you seriously after all this.
 
Sergey A Kryukov

GeneralSuch an overreaction... PinmemberCurtainDog9-Nov-09 19:45 
GeneralRe: Such an overreaction... PinmemberSAKryukov10-Nov-09 5:43 
GeneralMy vote of 1 Pinmemberbrian_agnes9-Nov-09 6:04 
GeneralShould be based on facts and reasoning PinmemberSAKryukov9-Nov-09 6:36 
GeneralMy vote of 2 PinmemberBen Robbins8-Nov-09 21:48 
GeneralRe: My vote of 2 [modified] PinmemberATANU.PODDER8-Nov-09 23:15 
GeneralMy vote of 2 Pinmemberdequadin7-Nov-09 6:52 
GeneralRe: My vote of 2 PinmemberATANU.PODDER8-Nov-09 23:27 
GeneralI understand the boxing reference PinmemberMember 36807856-Nov-09 5:09 
GeneralRe: I understand the boxing reference Pinmemberdberindei8-Nov-09 22:24 
GeneralRe: I understand the boxing reference PinmemberMember 36807859-Nov-09 6:36 
GeneralRe: I understand the boxing reference Pinmemberdberindei9-Nov-09 21:23 
GeneralRe: I understand the boxing reference [modified] PinmemberMember 368078511-Nov-09 7:45 
GeneralRe: I understand the boxing reference Pinmemberdberindei11-Nov-09 23:04 
GeneralRe: I understand the boxing reference PinmemberIndrora23-Nov-09 16:10 
GeneralRe: I understand the boxing reference Pinmemberdberindei23-Nov-09 21:42 
GeneralRe: I understand the boxing reference PinmemberIndrora4-Dec-09 16:12 
GeneralRe: I understand the boxing reference Pinmemberdberindei9-Dec-09 2:17 
GeneralWhy comparing "object" with "var"? PinmemberSAKryukov9-Nov-09 6:33 
GeneralRe: Why comparing "object" with "var"? PinmemberMember 368078511-Nov-09 9:39 
GeneralRe: Why comparing "object" with "var"? PinmemberSAKryukov11-Nov-09 12:14 
GeneralMy vote of 2 PinmemberUtwig6-Nov-09 2:58 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web02 | 2.8.140916.1 | Last Updated 4 Nov 2009
Article Copyright 2009 by ATANU.PODDER
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid