Просто натрапляю на цю стару посаду і думаю додати два мої центи. Як правило, якщо я сумніваюся, я швидко використовую метод GetHashCode () на будь-якому об’єкті, щоб перевірити особи. Отже для вище -
public class MyObject
{
public int SimpleInt { get; set; }
}
class Program
{
public static void RunChangeList()
{
var objs = new List<MyObject>() { new MyObject() { SimpleInt = 0 } };
Console.WriteLine("objs: {0}", objs.GetHashCode());
Console.WriteLine("objs[0]: {0}", objs[0].GetHashCode());
var whatInt = ChangeToList(objs);
Console.WriteLine("whatInt: {0}", whatInt.GetHashCode());
}
public static int ChangeToList(List<MyObject> objects)
{
Console.WriteLine("objects: {0}", objects.GetHashCode());
Console.WriteLine("objects[0]: {0}", objects[0].GetHashCode());
var objectList = objects.ToList();
Console.WriteLine("objectList: {0}", objectList.GetHashCode());
Console.WriteLine("objectList[0]: {0}", objectList[0].GetHashCode());
objectList[0].SimpleInt = 5;
return objects[0].SimpleInt;
}
private static void Main(string[] args)
{
RunChangeList();
Console.ReadLine();
}
І відповідь на моїй машині -
- objs: 45653674
- objs [0]: 41149443
- об’єкти: 45653674
- об’єкти [0]: 41149443
- список об'єктів: 39785641
- objectList [0]: 41149443
- щоІнт: 5
Таким чином, по суті об'єкт, який містить список, залишається тим самим у наведеному вище коді. Сподіваюся, що підхід допомагає.
.ToList()
створення дрібної копії. Посилання копіюються, але нові посилання все ще вказують на ті самі екземпляри, на які вказують оригінальні посилання. Коли ви думаєте про це,ToList
не може створити жоден,new MyObject()
колиMyObject
цеclass
тип.