首頁 > 後端開發 > C++ > 如何在C#中有效克隆通用列表?

如何在C#中有效克隆通用列表?

Susan Sarandon
發布: 2025-01-30 20:13:15
原創
546 人瀏覽過

How to Efficiently Clone Generic Lists in C#?

C#泛型列表的高效克隆:深入分析

問題陳述:

在C#中,如何高效地克隆一個泛型對象列表?雖然列表中的單個對像是可克隆的,但列表本身缺乏內置的“克隆”方法。

方法一:克隆值類型

對於包含值類型的泛型列表,克隆非常簡單。只需創建一個與原始列表內容相同的新列表:

<code class="language-csharp">List<你的类型> newList = new List<你的类型>(oldList);</code>
登入後複製

方法二:深度複製引用類型

如果泛型列表包含引用類型,並且需要深度複製(而不是淺複製),則可以使用以下利用ICloneable接口的方法:

<code class="language-csharp">List<ICloneable> oldList = new List<ICloneable>();
List<ICloneable> newList = new List<ICloneable>(oldList.Count);

oldList.ForEach((item) =>
{
    newList.Add((ICloneable)item.Clone());
});</code>
登入後複製

此方法確保克隆列表中的所有對像都與原始列表中的對象完全獨立。

方法三:使用複制構造函數克隆

當列表元素未實現ICloneable但具有復制構造函數時,可以使用不同的克隆策略:

<code class="language-csharp">List<你的类型> oldList = new List<你的类型>();
List<你的类型> newList = new List<你的类型>(oldList.Count);

oldList.ForEach((item) =>
{
    newList.Add(new 你的类型(item));
});</code>
登入後複製

此方法利用複制構造函數創建克隆列表中對象的新的實例。

其他建議

雖然ICloneable接口可以提供便利,但它依賴於保證所有成員的深度複製,這可能會帶來問題。可以考慮以下替代方案:

  • 複製構造函數:對於具有明確定義狀態的類型,複製構造函數提供了一種更有效且更易於維護的創建深度副本的方法。
  • 工廠方法:類似於你的类型.CopyFrom(你的类型 itemToCopy)的方法可用於返回具有所需狀態的類型的新的實例。

任何提出的克隆方法都可以封裝在可重用的方法或擴展方法中,以提高便利性。

以上是如何在C#中有效克隆通用列表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板