Sadece bu eski yazı üzerine tökezlemek ve benim iki sent eklemeyi düşündüm. Genellikle, şüphem varsa, kimliklerini kontrol etmek için herhangi bir nesne üzerinde hızlı bir şekilde GetHashCode () yöntemini kullanın. Yani yukarıda -
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();
}
Ve makineme cevap ver -
- objs: 45653674
- objs [0]: 41149443
- nesneler: 45653674
- objeler [0]: 41149443
- objectList: 39785641
- objectList [0]: 41149443
- ne: 5
Bu nedenle, esasen liste taşıyan nesne yukarıdaki kodda aynı kalır. Umarım yaklaşım yardımcı olur.
.ToList()
bir kılan sığ kopya. Referanslar kopyalanır, ancak yeni referanslar hala orijinal referansların işaret ettiği aynı örnekleri gösterir. Bunu düşündüğünüzde , bir tür olduğundaToList
hiçbirnew MyObject()
zaman oluşturamazsınız .MyObject
class