次のプログラムを見てください。
class Test
{
List<int> myList = new List<int>();
public void TestMethod()
{
myList.Add(100);
myList.Add(50);
myList.Add(10);
ChangeList(myList);
foreach (int i in myList)
{
Console.WriteLine(i);
}
}
private void ChangeList(List<int> myList)
{
myList.Sort();
List<int> myList2 = new List<int>();
myList2.Add(3);
myList2.Add(4);
myList = myList2;
}
}
私myList
はを通過したと想定ref
し、出力は
3
4
リストは確かに「参照渡し」ですが、sort
機能のみが有効になります。次のステートメントmyList = myList2;
は効果がありません。
したがって、出力は実際には次のとおりです。
10
50
100
この動作を説明していただけますか?実際に参照渡しでmyList
はない場合(効果がないように見える)、どのように効果がありますか?myList = myList2
myList.Sort()
私はそのステートメントでさえ効果がなく、出力が次のようになると想定していました:
100
50
10
ChangeList
aList<int>
ではなくaを返すのが最善のようvoid
です。