Value Or Reference? A C# Puzzle
Value Or Reference? A C# Puzzle
Written by Balamurugan Boominathan   
Article Index
Value Or Reference? A C# Puzzle


It doesn't work and its all due to the use of a value type within the foreach loop.

Because Product entity has been declared as struct which is value type  you can not directly update the Quantity property of a  Product entity which is being used as the iteration variable.

It even generates a compiler error message:

“Cannot modify p because it is foreach iteration variable.”

This doesn't happen if the Product entity is declared as a Class which is a reference type. In this case

p.Quantity = p.Quantity - Quantity;

will work because it modifies the object that p refers to rather than the value of p.

If you want to use a value type in a loop in this way you have to do the job more explicity and avoid using it as the loop variable.

For example:.

for (int i = 0; i < lstProducts.Count; i++)
Product p = lstProducts[i];
if (p.Name == ProductName)
p.Quantity = p.Quantity - Quantity;
lstProducts[i] = p;

In this case we have to retrieve the value type from the collection before we work on it.


The only real solution is to avoid using value types within sophisticated data structures. In other words, always prefer a class to a struct. This also avoids the potential problem of some future programmer converting your struct to a class thinking that it doesn't make any difference.


Further reading:

Inside C# 4 Data Structs

Value and Reference




blog comments powered by Disqus


To be informed about new articles on I Programmer, subscribe to the RSS feed, follow us on Google+, Twitter, Linkedin or Facebook or sign up for our weekly newsletter.

More Puzzles

Sharpen Your Coding Skills
Merkles and Social Engineering

Joe Celko has come up with a math puzzle based on one of the current political hot topics - but let the team from International Storm Door & Software explain the problem of faced by planners who w [ ... ]

Sharpen Your Coding Skills
Three Warehouses Puzzle

Talking through a problem is often a good way to see what is required for its solution. Reducing it in scale is another good strategy. But as programmers at the end of the day we need to code an algor [ ... ]

Sharpen Your Coding Skills
Taxicab Geometry Problems

In the conference season, developers face the perennial problem of getting from one hotel to another to meet colleagues. How good is your ability to write procedures to find shortest distance in a cit [ ... ]

Other Articles






RSS feed of all content
I Programmer - full contents
Copyright © 2016 All Rights Reserved.
Joomla! is Free Software released under the GNU/GPL License.