C# c Foreach在迭代Db表后返回相同的值

C# c Foreach在迭代Db表后返回相同的值,c#,foreach,C#,Foreach,我有个奇怪的问题。我试图用5行迭代bd表,并返回这个表值+一个图像作为字符串,当我检查foreach循环所有传递的项并添加到对象列表时,但当返回所有值时,我在列表项中发现了5个相同的值!!!都属于最后一行吗 public class TransferItem { public string foodType { set; get; } public string foodName { set; get; } public int fo

我有个奇怪的问题。我试图用5行迭代bd表,并返回这个表值+一个图像作为字符串,当我检查foreach循环所有传递的项并添加到对象列表时,但当返回所有值时,我在列表项中发现了5个相同的值!!!都属于最后一行吗

public class TransferItem
    {
        public  string foodType { set; get; }
        public  string foodName { set; get; }
        public  int foodPrice { set; get; }
        public  string foodDescription { set; get; }
        public byte[] foodImage { set; get; }
       
    }
 

var Transfer = new transferToFront();

                  var mylist = new List<object>();
                        foreach (var obj in FoodObjt)
                  {
                       String filePath = HostingEnvironment.MapPath(@"~/Images/");
                       Transfer.Id = obj.Id;
                       Transfer.foodName  = obj.foodName;
                       Transfer.foodImage = obj.foodImage;
                       Transfer.foodPrice = obj.foodPrice;
                       Transfer.foodType  = obj.foodType;
                       Transfer.foodDescription = obj.foodDescription;
                       var imageString = System.IO.File.ReadAllBytes(filePath + obj.foodImage);
                       Transfer.Image  = imageString;

                       mylist.Add(Transfer);
                  }
                      

                    return Ok(mylist);
传输在循环的迭代中共享,因此每次将同一对象附加到列表时都是如此。内存映射如下所示:

+--------------------------+
|          Transfer        |
+--+----+----+----+---+----+
   |    |    |    |   |
+--+----+----+----+---+--+
|  0    1     2   3   4  |
|         myList         |
+------------------------+
+----------+ +----------+ +----------+ +----------+ +----------+
|Transfer 1| |Transfer 2| |Transfer 3| |Transfer 4| |Transfer 5|
+--+-------+ +-----+----+ +---+------+ +----+-----+ +---+------+
   |               |          |             |           |
   |    +----------+          |             |           |
   |    |    +----------------+             |           |
   |    |    |    +-------------------------+           |
   |    |    |    |   +---------------------------------+
   |    |    |    |   |
+--+----+----+----+---+--+
|  0    1     2   3   4  |
|        myList          |
+------------------------+
因此,当您更改传输时,您将更改列表中的所有项目,因为它们是相同的

解决方案是为每个迭代创建一个新实例:

var mylist=新列表; FoodObjt中的foreach var obj { var转移=新的转移前端; 字符串filePath=HostingEnvironment.MapPath@~/Images/; Transfer.Id=obj.Id; Transfer.foodName=obj.foodName; Transfer.foodImage=obj.foodImage; Transfer.foodPrice=obj.foodPrice; Transfer.foodType=obj.foodType; Transfer.foodDescription=obj.foodDescription; var imageString=System.IO.File.ReadAllBytesfilePath+obj.foodImage; Transfer.Image=imageString; mylist.AddTransfer; } 返回Okmylist; 现在,内存映射如下所示:

+--------------------------+
|          Transfer        |
+--+----+----+----+---+----+
   |    |    |    |   |
+--+----+----+----+---+--+
|  0    1     2   3   4  |
|         myList         |
+------------------------+
+----------+ +----------+ +----------+ +----------+ +----------+
|Transfer 1| |Transfer 2| |Transfer 3| |Transfer 4| |Transfer 5|
+--+-------+ +-----+----+ +---+------+ +----+-----+ +---+------+
   |               |          |             |           |
   |    +----------+          |             |           |
   |    |    +----------------+             |           |
   |    |    |    +-------------------------+           |
   |    |    |    |   +---------------------------------+
   |    |    |    |   |
+--+----+----+----+---+--+
|  0    1     2   3   4  |
|        myList          |
+------------------------+

FoodObjt declared在哪里您在bat右侧有一个主要问题,您的transferToFront类在循环外创建了一次,并在没有创建新实例的情况下多次添加。在该集合中,您将多次使用FoodObjt集合最后一项的值拥有相同的对象。