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

  • 相关阅读:
    C# 一个用到WPF 和 反射的例子.
    Html 效果之 A 标签.
    HttpModule 的权限管理
    C# 入门经典示例.
    CSS 圆角边框
    .NET 平台文件去除行号
    C#调用WinApi关闭电脑屏幕含自动监视有无输入活动检测
    还是XP好啊
    SQL执行效率测试语句
    自用SqlHelper
  • 原文地址:https://www.cnblogs.com/LilianChen/p/2944884.html
Copyright © 2020-2023  润新知