《隨筆十四》——C#中的 “ 陣列中有用的屬性 和 方法 ”
阿新 • • 發佈:2018-11-24
目錄
● C# 陣列從 System.Array 類繼承, 它們可以從基類繼承很多有用的屬性和方法,如圖:
namespace HelloWorld_Console { class Program { static void PrintArray(int []a) { foreach (var x in a) { Write($"\n{x}"); } } static void Main(string[] args) { int[] arr = new int[] { 15, 20, 5, 25, 10 }; PrintArray(arr); WriteLine(); Array.Sort(arr); PrintArray(arr); WriteLine(); Array.Reverse(arr); PrintArray(arr); WriteLine(); WriteLine($" Rank = {arr.Rank}, Length = {arr.Length}"); WriteLine($"GetLength = {arr.GetLength(0)}"); WriteLine($"GetType = {arr.GetType()}"); ReadKey(); } } } 輸出結果為: 15 20 5 25 10 5 10 15 20 25 25 20 15 10 5 Rank = 1, Length = 5 GetLength = 5 GetType = System.Int32[]
Clone 方法
Clone 方法為陣列進行淺複製,也就是說,它只建立了陣列本身的克隆。 對於型別陣列和引用型別陣列而言,有不同的結果。
克隆值型別陣列會產生兩個獨立陣列。
克隆引用型別陣列會產生指向相同物件的兩個陣列。
那麼Clone 方法返回 Object 型別的引用, 它必須被強制轉換成陣列型別。
下列程式碼克隆一個值型別陣列的示例,它產生了兩個獨立的陣列:
namespace HelloWorld_Console { class Program { static void Main(string[] args) { int [] intArr1 = { 1, 2, 3 }; int[] intArr2 = (int[])intArr1.Clone(); WriteLine("輸出intArr2陣列中的值:"); foreach (var tt in intArr2) { WriteLine(tt); } for (int i=0;i<intArr2.Length;++i) { intArr2[i] *= 100; } WriteLine("輸出改變intArr2陣列中的值:"); foreach (var tt in intArr2) { WriteLine(tt); } ReadKey(); } } } 輸出結果為: 輸出intArr2陣列中的值: 1 2 3 輸出改變intArr2陣列中的值: 100 200 300
克隆引用型別陣列時, 這兩個陣列都會指向相同的物件。
namespace HelloWorld_Console { class A { public int Value = 5; } class Program { static void Main(string[] args) { A[] AArray1 = new A[3] { new A(), new A(), new A() }; WriteLine("先輸出AArray1的值:"); foreach(var tt in AArray1) { WriteLine(tt.Value); } A[] AArray2 = (A[])AArray1.Clone(); WriteLine("再輸出AArray2的值:"); foreach (var tt in AArray1) { WriteLine(tt.Value); } WriteLine("再輸出AArray2的改變後的值:"); for (int i=0;i<AArray2.Length;++i) { AArray2[i].Value = i+1; AArray2[i].Value *= 100; WriteLine(AArray2[i].Value); } ReadKey(); } } } 輸出結果為: 先輸出AArray1的值: 5 5 5 再輸出AArray2的值: 5 5 5 再輸出AArray2的改變後的值: 100 200 300