C# - 这是为什么变量没有被通过的方法被放在
问题描述:
所以后改变我显然相当新的编程,但我想弄清楚这是为什么不工作C# - 这是为什么变量没有被通过的方法被放在
我试图采取字符串myname,并将先生添加到它的开始。我知道我可以做到这一点只是myname = "Mr. " + myname
但是我想了解如何使用方法来更改变量的值。那么,为什么不改变呢?
public class Program
{
public static void Main(string[] args)
{
string myname = "harry";
Console.WriteLine(myname); //output is harry
namechanger(myname); //this should modify harry to Mr. Harry
Console.WriteLine(myname); //output is still harry?
}
static string namechanger(string name)
{
name = "Mr. " + name;
return name;
}
}
答
Strings are immutable和passed by value。每次创建一个字符串时,它都不会被更改。因此,与类的实例不同,您不能通过将字符串交给修改它的方法来修改字符串。
在这种情况下,因为你return
在namechanger
修改后的字符串,所有你需要做的是确保你分配myname
该方法的结果;像这样
myname = namechanger(myname);
原始类型(int
,float
,long
等)以这种方式工作,因为这样做struct
实例 - 所以一定要寻找那些在未来,如果您不确定为什么一个结构的价值在将其传递给方法时不会改变。
所有类型都以这种方式工作,不仅仅是原始类型...... – aquinas
也许是一种迂腐的意义,但用'class'和'struct'调用一个方法会传递非常不同的值 - 一个是指针,一个是整个结构。 “通过价值”和“通过参考”是用来区分行为差异的术语。 – Knetic
@ Knetic - 不,那是不对的。 aquinas是正确的。 – Enigmativity