亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在C#中克隆泛型列表?

如何在C#中克隆泛型列表?

躍然一笑 2019-06-20 16:39:15
如何在C#中克隆泛型列表?我在C#中有一個對象的通用列表,并希望克隆這個列表。列表中的項目是可圈可點的,但似乎沒有一個選項可供選擇list.Clone().有什么簡單的辦法嗎?
查看完整描述

3 回答

?
ibeautiful

TA貢獻1993條經驗 獲得超6個贊

如果您的元素是值類型,那么您可以這樣做:

List<YourType> newList = new List<YourType>(oldList);

但是,如果它們是引用類型,并且您需要一個深度副本(假設您的元素正確地實現了ICloneable),你可以這樣做:

List<ICloneable> oldList = new List<ICloneable>();List<ICloneable> newList = new List<ICloneable>(oldList.Count);oldList.ForEach((item) =>
    {
        newList.Add((ICloneable)item.Clone());
    });

顯然,替換ICloneable在上面的泛型中,使用實現的任何元素類型進行強制轉換。ICloneable.

如果元素類型不支持ICloneable但是有一個復制構造函數,您可以這樣做:

List<YourType> oldList = new List<YourType>();List<YourType> newList = new List<YourType>(oldList.Count);oldList.ForEach((item)=>
    {
        newList.Add(new YourType(item));
    });

就我個人而言,我會避免ICloneable因為需要保證所有成員都能得到一份深刻的副本。相反,我建議復制構造函數或工廠方法,例如YourType.CopyFrom(YourType itemToCopy)的新實例。YourType.

這些選項中的任何一個都可以由方法(擴展或其他方式)包裝。


查看完整回答
反對 回復 2019-06-20
?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

public static object DeepClone(object obj) {
  object objResult = null;
  using (MemoryStream  ms = new MemoryStream())
  {
    BinaryFormatter  bf =   new BinaryFormatter();
    bf.Serialize(ms, obj);

    ms.Position = 0;
    objResult = bf.Deserialize(ms);
  }
  return objResult;}

這是用C#和.NET 2.0實現它的一種方法。你的對象需要[Serializable()]..目標是失去所有的引用并構建新的引用。


查看完整回答
反對 回復 2019-06-20
  • 3 回答
  • 0 關注
  • 914 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號