Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Make a reference to another string in C#

As far as I know a string in C# is a reference type.

So in the following code 'a' should be equal to "Hi", but it still keeps its value which is "Hello". Why?

string a = "Hello";
string b = a;
b = "Hi";
like image 216
Nour Avatar asked Nov 28 '22 01:11

Nour


1 Answers

A number of the answers point out that strings are immutable; though that is true, it is completely irrelevant to your question.

What is more relevant is that you are misunderstanding how references work with respect to variables. A reference is not a reference to a variable. Think of a reference as a piece of string. You start with this:

a----------------------Hello

Then you say that "b = a", which means attach another piece of string to the same thing that a is attached to:

a----------------------Hello
                      /
b---------------------

Then you say "now attach b to Hi"

a----------------------Hello

b----------------------Hi

You are thinking either that references work like this:

a----------------------Hello

Then I say that b is another name for a:

a/b ----------------------Hello

Then I change b, which changes a, because they are two names for the same thing:

a/b ----------------------Hi

Or perhaps you are thinking that references work like this:

a----------------------Hello

Then I say that b refers to a:

b -------------- a ----------------------Hello

Then I change b, which indirectly changes a:

b -------------- a ----------------------Hi

That is, you are expecting to make a reference to a variable, instead of a value. You can do that in C#, like this:

void M(ref int x)
{
    x = 1;
}
...
int y = 0;
M(ref y);

That means "for the duration of the call to M, x is another name for y". A change to x changes y because they are the same variable. Notice that the type of the variable need not be a reference type.

like image 101
Eric Lippert Avatar answered Dec 18 '22 07:12

Eric Lippert