เพียงสะดุดเมื่อโพสต์เก่านี้และคิดว่าจะเพิ่มสองเซ็นต์ของฉัน โดยทั่วไปถ้าฉันมีข้อสงสัยฉันจะใช้วิธี 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
- objectList: 39785641
- objectList [0]: 41149443
- อะไรก็ได้: 5
ดังนั้นวัตถุที่รายการนั้นจะยังคงเหมือนเดิมในรหัสข้างต้น หวังว่าวิธีการช่วย
.ToList()
ทำสำเนาตื้นๆ การอ้างอิงถูกคัดลอก แต่การอ้างอิงใหม่ยังคงชี้ไปที่อินสแตนซ์เดียวกันกับการอ้างอิงดั้งเดิมชี้ไปที่ เมื่อคุณนึกถึงมันToList
ไม่สามารถสร้างใด ๆnew MyObject()
เมื่อMyObject
เป็นclass
ประเภท