Jump to content

Strange Behavior in Method Parameters


Recommended Posts

Can anyone explain to me why the following code produces what it is producing on my computer?This is the code - very straight forward stuff, as far as I'm concerned:

using System;using System.Collections;using System.Text;using System.Web.UI;public partial class _Default : Page{    protected void Page_Load(object sender, EventArgs e)    {		ArrayList localArrayList = new ArrayList();		Hashtable localHashtable = new Hashtable();		string localString = String.Empty;		StringBuilder localStringBuilder = new StringBuilder();		int localInteger = 0;		for (int i = 0; i < 10; i++)		{			TestMethod(i, localHashtable, localArrayList, localString, localStringBuilder, localInteger);		}		Response.Write("Hashtable has " + localHashtable.Count + " elements.<br />");		Response.Write("ArrayList has " + localArrayList.Count + " elements.<br />");		Response.Write("String is '" + localString + "'.<br />");		Response.Write("StringBuilder is '" + localStringBuilder.ToString() + "'.<br />");		Response.Write("Integer is " + localInteger + ".<br />");    }	private void TestMethod(int i, Hashtable testHashtable, ArrayList testArrayList, string testString, StringBuilder testStringBuilder, int testInteger)	{		testHashtable.Add(i, i);		testArrayList.Add(i);		testString += i + " ";		testStringBuilder.Append(i + " ");		testInteger += i;	}}

Here is the expected output:

Hashtable has 0 elements.ArrayList has 0 elements.String is ''.StringBuilder is ''.Integer is 0.
Yet, here is the actual output.
Hashtable has 10 elements.ArrayList has 10 elements.String is ''.StringBuilder is '0 1 2 3 4 5 6 7 8 9 '.Integer is 0.
Has anyone experienced this? Any explanations you can offer?
Link to comment
Share on other sites

Bah! Always answering my own questions:http://msdn.microsoft.com/library/default....dParameters.aspI didn't make the connection that when you pass reference types - like Hashtables, ArrayLists, etc. - to methods, a copy of that reference is passed and, unless you change the reference to have it point to a different location, any changes you make to the parameter affect the original variable.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Create New...