1、 定制類型的數組
1 using System; 2 3 namespace ConsoleApplication4 4 { 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 Person[] myPersons = new Person[2]; 10 myPersons[0] = new Person("Lilian", "Chen"); 11 myPersons[1] = new Person("1", "2"); 12 Console.WriteLine(myPersons[0].ToString()); 13 Console.WriteLine(myPersons[1].ToString()); 14 15 // 對定制類型使用數組初始化器 16 Person[] persons=new Person[]{new Person("a","b"),new Person("c","d")}; 17 Console.WriteLine(persons[1].ToString()); 18 Console.ReadLine(); 19 20 } 21 } 22 23 public class Person 24 { 25 public Person() 26 { } 27 28 public Person(string firstName, string lastName) 29 { 30 this.FirstName = firstName; 31 LastName = lastName; 32 } 33 34 public string FirstName { get; set; } 35 public string LastName { get; set; } 36 public override string ToString() 37 { 38 return String.Format("{0} {1}", FirstName, LastName); 39 } 40 } 41 }
注意:如果數組中的元素是引用類型,就必須為每個數組元素分配內存。
myPersons是一個存儲在堆棧上的變量,該變量引用了存儲在托管堆上的Person元素數組。數組中的每一項都引用了一個Person對象。
2. 創建數組
用[]聲明數組是C#中使用Array類的記號,在后台會創建一個派生於抽象基類Array的新類。這樣就可以使用Array類為每個C#數組定義的方法和屬性了。
Array類是一個抽象類,所以不能用構造函數來創建數組。但除了可以使用C#語法創建數組實例之外,還可以使用靜態方法CreateInstance()創建數組(如果事先不知道元素的類型,就可以使用該靜態方法)。
1 using System; 2 3 namespace ConsoleApplication5 4 { 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 // CreateInstance方法的第一個參數是元素的類型,第二個參數是數組的大小 10 Array intArray = Array.CreateInstance(typeof(int), 5); 11 for (int i = 0; i < intArray.Length; i++) 12 { 13 // 使用SetValue()方法設置值 14 intArray.SetValue(i, i); 15 } 16 17 for (int i = 0; i < intArray.Length; i++) 18 { 19 // 使用GetValue()方法讀取值 20 Console.WriteLine(intArray.GetValue(i)); 21 Console.ReadLine(); 22 } 23 24 // 將已經創建的數組強制轉換成聲明為int[]的數組 25 int[] intArray1 = (int[])intArray; 26 Console.WriteLine(intArray1.Length); 27 } 28 } 29 }
用CreateInstance()方法創建多維數組和不基於0的數組:
1 using System; 2 3 namespace ConsoleApplication4 4 { 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 int[] lengths = { 2, 3 }; 10 int[] lowerBounds = { 1, 10 }; 11 Array racers = Array.CreateInstance(typeof(Person), lengths, lowerBounds); 12 13 racers.SetValue(new Person("a", "b"), 1, 10); 14 racers.SetValue(new Person("c", "d"), 1, 11); 15 racers.SetValue(new Person("e", "f"), 1, 12); 16 racers.SetValue(new Person("g", "h"), 2, 10); 17 racers.SetValue(new Person("i", "j"), 2, 11); 18 racers.SetValue(new Person("k", "l"), 2, 12); 19 20 Person[,] racers1 = (Person[,])racers; 21 Person first = racers1[1, 10]; 22 } 23 } 24 25 public class Person 26 { 27 public Person() 28 { } 29 30 public Person(string firstName, string lastName) 31 { 32 this.FirstName = firstName; 33 LastName = lastName; 34 } 35 36 public string FirstName { get; set; } 37 public string LastName { get; set; } 38 public override string ToString() 39 { 40 return String.Format("{0} {1}", FirstName, LastName); 41 } 42 } 43 }
3. 復制數組
- 如果數組的元素是值類型,就會復制所有的值
1 int[] intArray1 = { 1, 2 }; 2 3 // 如果刪掉“(int[])”會有Error“Cannot implicitly convert type ‘object’ to 'int[]'” 4 int[] intArray2 =(int[]) intArray1.Clone
- 如果數組包含引用類型,則不復制元素,而只復制引用.
如果修改beatlesClone中的一個元素的屬性,就會改變beatles中的對應對象。
1 Person[] beatles = { new Person("John", "Lennon"), new Person("Paul", "McCartney") }; 2 Person[] beatlesClone = (Person[])beatles.Clone();