2016-09-07 35 views
0

我有一類如果我更改了一個列表的數據,爲什麼另一個列表也會更改?

class MatchAddress 
{ 
    public string Name { get; set; } 
    public string Taluka { get; set; } 
    public string District { get; set; } 
    public string Pincode { get; set; } 
    public float Rank { get; set; } 
} 

我有提到以下

var dst = ds.Tables[0].AsEnumerable() 
         .Select(s => new MatchAddress 
         { 
          Name = s.Field<String>("officename").Trim().ToLower(), 
          Pincode = Convert.ToString(s.Field<double>("pincode")).Trim(), 
          Taluka = s.Field<String>("Taluk").Trim(), 
          District = s.Field<String>("Districtname").Trim(), 
          Rank = 0f 
         }) 
         .ToList(); 

我也初始化新的列表List<MatchAddress> lm;

現在我分配dst列表創建使用這個類的新名單lm like below

lm = dst ; 


foreach (MatchAddress ma in lm) 
{      
    if (ma.Name == "xyz") 
    {        
     ma.Pincode = null; 
    } 
} 

此後,確保將Pincode的屬性列表lm設置爲null,其中name =「XYZ」。

並且因此原因列表lm被更新並且設置PIN碼字段爲空。

但我的問題是,爲什麼該列表lm也更新列表dst的結果。

and lm list還在列表dst中設置pincode爲null。

我們使dst列表的克隆爲lm爲什麼列表lm也改變了列表dst?

我知道背後的原因不是這個答案爲什麼這發生如果你知道,那麼請讓我現在。

我不想對這個問題

+1

你最好不要讓dst'的'克隆,你'dst'列表分配到'這是參考指派lm'列表簡單的擴展方法,這就是爲什麼這兩個名單改變。 –

回答

0

的答案,因爲List是一個引用類型的數據。 lm和dst都指向相同的數據。如果你想兩份名單是獨立,你可以做到這一點是:

List<MatchAddress> lm = dst.ConvertAll(address => new MatchAddress(Name = address.Name, Pincode = address.Pincode, Taluka= address.Taluka, District = address.District, Rank = address.Rank)); 
+1

這個問題在這裏已經被問過幾千次了,沒必要再回答一次,並且忘了 – HimBromBeere

+0

@ADMIN能工作嗎? –

1

列表是引用類型的數據。但如果你願意,你可以製作克隆。這裏是該

static class Extensions 
    { 
     public static IList<T> Clone<T>(this IList<T> listToClone) where T: ICloneable 
     { 
      return listToClone.Select(item => (T)item.Clone()).ToList(); 
     } 
    } 
相關問題