下面是示例代碼:C#變量引用混亂
List<List<Pet>> petsList = new List<List<Pet>>();
List<Pet> pets = new List<Pet>()
{
new Pet {Name = "Whiskers"},
new Pet {Name = "Boots"},
new Pet {Name = "Bradley"},
};
petsList.Add(pets);
pets = pets.OrderBy(pet => pet.Name).ToList();
foreach (Pet pet in petsList[0])
{
Console.WriteLine("{0}", pet.Name);
}
的完整代碼可以在這裏找到:https://pastebin.com/raw/uB2B7A9g
這段代碼的輸出中是不是我本來期望。
我本來期望: 靴 布拉德利 威威
但實際產量爲: 威威 靴 布拉德利
不是pets
只是一個指針?
所以如果我加pets
到petsList
,然後修改pets
,那麼petsList[0]
應該指向修改變量?
但是情況並非如此,petsList[0]
指向未修改的pets
變量。
解決這一問題的唯一辦法就是要做到:
List<List<Pet>> petsList = new List<List<Pet>>();
List<Pet> pets = new List<Pet>()
{
new Pet {Name = "Whiskers"},
new Pet {Name = "Boots"},
new Pet {Name = "Bradley"},
};
pets = pets.OrderBy(pet => pet.Name).ToList();
petsList.Add(pets);
foreach (Pet pet in petsList[0])
{
Console.WriteLine("{0}", pet.Name);
}
.Add()函數不會將參數添加到變量中。我想如果你嘗試使用petList [0] = pets並且檢查 – khaled4vokalz
如果你的Add方法簽名是'Add(ref T)',它會工作正常。 –