下面是一些非常简单的代码,将突出我的问题/问题
static void Main(string[] args)
{
var myInitialString = "My Initial String";
Console.WriteLine($"{nameof(myInitialString)}: {myInitialString}");
MyMethod(myInitialString, MyRefMethod(ref myInitialString));
Console.ReadLine();
}
static void MyMethod(string myVariableString, string otherString)
{
//Prints out "My Initial String"
Console.WriteLine($"MyString in myMethod: {myVariableString}");
}
static string MyRefMethod(ref string myRefString)
{
myRefString = "MyEdittedString";
Console.WriteLine($"{nameof(myRefString)} = {myRefString}");
return "OtherString";
}
Run Code Online (Sandbox Code Playgroud)
如果我对此进行调试并进行监视,myInitialString我可以看到它的值"My Editted String"就在它进入MyMethod并保持该值之前.但是这个myVariableString论点的价值是"My Initial String".这似乎意味着在第二个参数之前捕获了变量值,这是一个已经评估过的方法.
如果我在打电话MyRefMethod之前单独拨打电话MyMethod,它就像我期望的那样工作,打印出来"My Editted String".如果我交换参数使得调用MyRefMethod代表传递给的第一个参数MyMethod,它也会打印出来"My Editted String".
这引出了我的问题:传递给方法的参数如何以及何时被捕获?上面显示的行为是否是预期的?
编辑:只是为了澄清,因为问题已被标记为重复.这不是关于引用和值类型之间的区别以及传递它们的问题.正如有人在下面指出的那样,这种行为与值类型相同
| 归档时间: |
|
| 查看次数: |
52 次 |
| 最近记录: |