C#:定制類型的數組,Array類


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();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM