Click here to Skip to main content
15,887,350 members
Articles / All Topics

Can the C# ‘var’ Keyword be Misused?

Rate me:
Please Sign up or sign in to vote.
5.00/5 (4 votes)
21 Jul 2011CPOL 17.1K   1   9
More and more often I've been seeing C# code like this: var Data = GetData(); What on earth does GetData() return? This code is not as maintainable as it could be and is not as maintainable as it should be.

More and more often I've been seeing C# code like this:

C#
var Data = GetData(); 

What on earth does GetData() return? This code is not as maintainable as it could be and is not as maintainable as it should be.

Doesn't explicitly declaring the variable type make the code more readable, understandable and ultimately more maintainable?

C#
DataTable Data = GetData(); 

Ahhh, GetData() returns a DataTable.

I know that var has uses but I wish it would have been named something much longer because typing 'var' is too easy. Perhaps it should have been named AutomaticTypeVar or even AutoVar to reduce the lazy misuse.

Just my 2 cents.

Steve Wellens

[Update]

A user on the Asp.Net forums was kind enough to provide this quote and link:

"However, the use of var does have at least the potential to make your code more difficult to understand for other developers. For that reason, the C# documentation generally uses var only when it is required."

http://msdn.microsoft.com/en-us/library/bb384061.aspx 

 

[Update II]

There seem to be a lot of lazy developers who are trying to justify and rationalize their lazy habits. 

Let's try a heuristic approach to see if the concept of maintenance can be better communicated:

C#
var x = FunctionA();              // this is unacceptable

var x = GetCustomerID();          // better

var CustID = GetCustomerID();     // better but what is CustID?

String CustID = GetCustomerID();  // best.

License

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


Written By
EndWell Software, Inc.
United States United States
I am an independent contractor/consultant working in the Twin Cities area in Minnesota. I work in .Net, Asp.Net, C#, C++, XML, SQL, Windows Forms, HTML, CSS, etc., etc., etc.

Comments and Discussions

 
Question"Var" is good when it avoids redundancy; bad when it obscures needed information. Pin
supercat921-Jul-11 9:42
supercat921-Jul-11 9:42 
In some contexts, "var" can make code much easier to read, especially when the data type has a long name, and would be pretty much unmistakable. For example, which is cleaner:
Dictionary<ThisType, List<ThatType>> myDict = new Dictionary<ThisType, List<ThatType>>();
FancyDataStructure<SomeType> myThing = FancyDataStructure<SomeType>.Create();

or
var myDict = new Dictionary<ThisType, List<ThatType>>();
var myThing = FancyDataStructure<SomeType>.Create();


Further, suppose one sees code like:
IEnumerable<IAutomobile> myCars = myPassengerCarFactory.CreateList();

and myPassengerCarFactory returns an IList<IPassengerCar> with a declared type of IEnumerable<IPassengerCar>. Should one assume that the programmer might have refactored the code to use a PassengerCarFactory and forgot to update the return type, or should one assume there was a reason for explicitly declaring the variable as an IEnumerable of the base type?

If the normal practice in such cases would be to only specify complex types in cases where there's a reason to use something other than the factory return type, one could assume the use of IEnumerable<IAutomobile> was deliberate. But if types are always manually specified, there'd be nothing to clarify the issue.
AnswerRe: "Var" is good when it avoids redundancy; bad when it obscures needed information. Pin
Jaime Olivares1-Aug-11 15:12
Jaime Olivares1-Aug-11 15:12 
GeneralI agree -- I hate the trade-off of convenience vs. stability (or security) Pin
Bit-Smacker15-Jun-10 7:01
Bit-Smacker15-Jun-10 7:01 
GeneralI just had to... Pin
Tom Janssens6-Apr-10 6:47
Tom Janssens6-Apr-10 6:47 
GeneralAbout 'var' name Pin
Jaime Olivares19-Nov-09 18:24
Jaime Olivares19-Nov-09 18:24 
GeneralRe: About 'var' name [modified] Pin
Steve Wellens1-Aug-11 15:04
Steve Wellens1-Aug-11 15:04 
GeneralRe: About 'var' name Pin
Jaime Olivares1-Aug-11 15:08
Jaime Olivares1-Aug-11 15:08 
GeneralRe: About 'var' name Pin
Steve Wellens1-Aug-11 15:10
Steve Wellens1-Aug-11 15:10 
GeneralRe: About 'var' name Pin
Jaime Olivares1-Aug-11 15:19
Jaime Olivares1-Aug-11 15:19 

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

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