博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#:定制类型的数组,Array类
阅读量:5297 次
发布时间:2019-06-14

本文共 4122 字,大约阅读时间需要 13 分钟。

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 Person24 {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 Person26     {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();

 

转载于:https://www.cnblogs.com/LilianChen/archive/2013/03/05/2944884.html

你可能感兴趣的文章
对 HTTP 304 的理解
查看>>
深入理解css中的margin属性
查看>>
C++ 删除字符串的两种实现方式
查看>>
电容选型
查看>>
ORA-01502: 索引'P_ABCD.PK_WEB_BASE'或这类索引的分区处于不可用状态
查看>>
Spring EL hello world实例
查看>>
百度地图API地理位置和坐标转换
查看>>
MyBatis学习总结(六)——调用存储过程
查看>>
code-代码平台服务器路径
查看>>
离线安装 Visual Studio Express 而不下载整个镜像文件的方法(转载)
查看>>
2017-2018-2偏微分方程复习题解析10
查看>>
Java抽象类和接口的比较
查看>>
iOS UI控件5-UIPickerView
查看>>
素数筛选法
查看>>
php连接postgresql数据库
查看>>
移动应用开发选型:向左还是向右?
查看>>
开发进度一
查看>>
十天冲刺(6)
查看>>
MyBaits学习
查看>>
管道,数据共享,进程池
查看>>