Simplemente me topé con este viejo post y pensé en agregar mis dos centavos. En general, si tengo dudas, uso rápidamente el método GetHashCode () en cualquier objeto para verificar las identidades. Entonces para arriba -
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();
}
Y responde en mi máquina
- objs: 45653674
- objs [0]: 41149443
- objetos: 45653674
- objetos [0]: 41149443
- objectList: 39785641
- objectList [0]: 41149443
- whatInt: 5
Entonces, esencialmente, el objeto que lleva la lista permanece igual en el código anterior. Espero que el enfoque ayude.
.ToList()
hace una copia superficial . Las referencias se copian, pero las nuevas referencias todavía apuntan a las mismas instancias a las que apuntan las referencias originales. Cuando lo piensas,ToList
no puedes crear ningunonew MyObject()
cuandoMyObject
es unclass
tipo.