自定义类型的数组
using System;
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
Person[] myPersons = new Person[2];
myPersons[0] = new Person("Lilian", "Chen");
myPersons[1] = new Person("1", "2");
Console.WriteLine(myPersons[0].ToString());
Console.WriteLine(myPersons[1].ToString());
// 对自定义类型使用数组初始化器
Person[] persons = new Person[] {new Person("a", "b"), new Person("c", "d")};
Console.WriteLine(persons[1].ToString());
Console.ReadLine();
}
}
public class Person
{
public Person()
{ }
public Person(string firstName, string lastName)
{
this.FirstName = firstName;
LastName = lastName;
}
public string FirstName
{
get;
set;
}
public string LastName
{
get;
set;
}
public override string ToString()
{
return String.Format("{0} {1}", FirstName, LastName);
}
}
}注意:如果数组中的元素是引用类型,就必须为每个数组元素分配内存。
myPersons 是一个存储在堆栈上的变量,该变量引用了存储在托管堆上的 Person 元素数组。数组中的每一项都引用了一个 Person 对象。

创建数组
用 [] 声明数组是 C# 中使用 Array 类的记号,在后台会创建一个派生于抽象基类 Array 的新类。这样就可以使用 Array 类为每个 C# 数组定义的方法和属性了。
Array 类是一个抽象类,所以不能用构造函数来创建数组。但除了可以使用 C# 语法创建数组实例之外,还可以使用静态方法 CreateInstance() 创建数组(如果事先不知道元素的类型,就可以使用该静态方法)。
using System;
namespace ConsoleApplication5
{
class Program
{
static void Main(string[] args)
{
// CreateInstance 方法的第一个参数是元素的类型,第二个参数是数组的大小
Array intArray = Array.CreateInstance(typeof(int), 5);
for (int i = 0; i < intArray.Length; i++)
{
// 使用 SetValue() 方法设置值
intArray.SetValue(i, i);
}
for (int i = 0; i < intArray.Length; i++)
{
// 使用 GetValue() 方法读取值
Console.WriteLine(intArray.GetValue(i));
Console.ReadLine();
}
// 将已经创建的数组强制转换成声明为 int[] 的数组
int[] intArray1 = (int[])intArray;
Console.WriteLine(intArray1.Length);
}
}
}用 CreateInstance() 方法创建多维数组和不基于 0 的数组:
using System;
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
int[] lengths = { 2, 3 };
int[] lowerBounds = { 1, 10 };
Array racers = Array.CreateInstance(typeof(Person), lengths, lowerBounds);
racers.SetValue(new Person("a", "b"), 1, 10);
racers.SetValue(new Person("c", "d"), 1, 11);
racers.SetValue(new Person("e", "f"), 1, 12);
racers.SetValue(new Person("g", "h"), 2, 10);
racers.SetValue(new Person("i", "j"), 2, 11);
racers.SetValue(new Person("k", "l"), 2, 12);
Person[,] racers1 = (Person[,])racers;
Person first = racers1[1, 10];
}
}
public class Person
{
public Person()
{ }
public Person(string firstName, string lastName)
{
this.FirstName = firstName;
LastName = lastName;
}
public string FirstName
{
get;
set;
}
public string LastName
{
get;
set;
}
public override string ToString()
{
return String.Format("{0} {1}", FirstName, LastName);
}
}
}复制数组
1) 如果数组的元素是值类型,就会复制所有的值
int[] intArray1 = { 1, 2 };
// 如果删掉 “(int[])” 会有 Error “Cannot implicitly convert type ‘object’ to 'int[]'”
int[] intArray2 = (int[]) intArray1.Clone
如果数组包含引用类型,则不复制元素,而只复制引用
如果修改 beatlesClone 中的一个元素的属性,就会改变 beatles 中的对应对象。
Person[] beatles = { new Person("John", "Lennon"), new Person("Paul", "McCartney") };
Person[] beatlesClone = (Person[])beatles.Clone();
更多C# 自定义类型的数组与 Array 类相关文章请关注PHP中文网!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号