C#陣列元素範圍克隆技巧
程式開發中,經常需要操作數組的部分元素。一種高效的方法是建立一個僅包含所需元素的新陣列。在C#中,這可以透過擴展方法來實現。
建立子數組的擴充方法
要建立一個包含指定元素範圍的子數組,您可以定義以下擴充方法:
<code class="language-csharp">public static T[] SubArray<T>(this T[] data, int index, int length) { T[] result = new T[length]; Array.Copy(data, index, result, 0, length); return result; }</code>
此方法接收原始陣列、要包含的第一個元素的索引、以及新陣列的長度。它傳回一個包含指定元素子集的新陣列。
使用方法範例
考慮以下範例:
<code class="language-csharp">int[] data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; // 创建一个包含索引3到索引7的元素的子数组 int[] subarray = data.SubArray(3, 5); // 注意长度为5,包含索引3,4,5,6,7 // 输出子数组 Console.WriteLine(string.Join(" ", subarray));</code>
輸出:
<code>3 4 5 6 7</code>
深度克隆
如果您需要深度克隆(即新數組,其中元素本身是克隆而不是引用),您可以使用一種更複雜的技術,包括序列化和反序列化。這是一個用於深度克隆的更新後的擴展方法:
<code class="language-csharp">public static T[] SubArrayDeepClone<T>(this T[] data, int index, int length) { T[] arrCopy = new T[length]; Array.Copy(data, index, arrCopy, 0, length); using (MemoryStream ms = new MemoryStream()) { var bf = new BinaryFormatter(); bf.Serialize(ms, arrCopy); ms.Position = 0; return (T[])bf.Deserialize(ms); } }</code>
此方法首先建立一個新數組,將指定範圍的元素從原始數組複製到其中,然後使用序列化建立子數組中物件的深度克隆。請注意,原始數組中的物件必須是可序列化的。 BinaryFormatter
已被標記為過時,建議使用更現代的序列化方法,例如 System.Text.Json
。 此範例僅供理解原理,實際應用中應替換為更安全的序列化方式。
以上是如何在 C# 中高效地克隆一系列數組元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!