Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对列表、数组或ref参数中对象的引用_C#_Reference - Fatal编程技术网

C# 对列表、数组或ref参数中对象的引用

C# 对列表、数组或ref参数中对象的引用,c#,reference,C#,Reference,我有任意数量的变量字符串。我想在方法上对他们做点什么 比如说 string s1 = "s1"; string s2 = "s2"; List<string> list = new List<string>(); list.Add(s1); list.Add(s2); SomeMethod(list); Console.Writeline(string.Format("{0} {1}, s1, s2)); // I want have here value after

我有任意数量的变量字符串。我想在方法上对他们做点什么

比如说

string s1 = "s1";
string s2 = "s2";
List<string> list = new List<string>();
list.Add(s1);
list.Add(s2);
SomeMethod(list);
Console.Writeline(string.Format("{0} {1}, s1, s2)); 
// I want have here value after SomeMethod. Its possible without rewriting back from the list to variable???
void SomeMethod(List<string> list2)
{
 // do something with list2 for example list2[0] = "s11";
}
string s1=“s1”;
字符串s2=“s2”;
列表=新列表();
列表。添加(s1);
列表。添加(s2);
方法(列表);
Writeline(string.Format(“{0}{1},s1,s2));
//我想在SomeMethod之后有一个here值。它可能不需要从列表重写回变量???
void方法(列表2)
{
//使用list2执行一些操作,例如list2[0]=“s11”;
}

我想使用params,但无法将params与ref连接,因此可能是在列表或数组中…

欢迎使用堆栈溢出。您是否尝试使用list2执行某些操作?例如,您是否尝试将“s11”分配给
list2[0]
?如果是,您观察到了什么结果?如果将数组或列表传递给方法,则该方法不会获取数组或列表的副本。它会获取对实际数组或实际列表的引用。如果该方法更改数组或列表,则会更改调用者提供给它的同一对象。数组和列表是引用类型。所有类都是r引用类型。这些类型不需要使用
ref
关键字;它意味着其他内容。上面的代码应该可以很好地工作。您具体遇到了什么问题?我认为OP希望在
SomeMethod
中修改
s1
s2
。对吗?当您将s1变量放入带有t的字符串中时添加方法时,您将插入对“s1”字符串的引用作为列表的第一个元素。现在,如果您将列表中的第一个元素更改为具有不同的引用,则列表将包含新引用,但变量s1仍然具有对“s1”的相同引用“字符串。如果不将
s1
/
s2
作为参数传递(特别是
ref
参数),则另一个函数无法更改
s1
s2
。欢迎使用堆栈溢出。”。你有没有试着对列表2做些什么?例如,您是否尝试将“s11”分配给
list2[0]
?如果是,你观察到了什么结果?如果将数组或列表传递给方法,则该方法不会获取数组或列表的副本。它获取对实际数组或实际列表的引用。如果该方法更改了数组或列表,则它正在更改调用方提供给它的同一对象。数组和列表是引用类型。所有类都是引用类型。你不需要
ref
关键字;上面的代码应该可以很好地工作。你具体遇到了什么问题?我想OP想在
SomeMethod
中修改
s1
s2
。是吗?当您使用Add方法将s1变量放入字符串时,您将插入对“s1”字符串的引用,作为列表的第一个元素。现在,如果您将列表中的第一个元素更改为具有不同的引用,那么您的列表将包含新的引用,但是变量s1仍然具有对“s1”字符串的相同引用。如果不将
s1
s2
作为参数传递,则其他函数无法更改
s1
/
s2
(特别是
ref
参数)。