C# 数组 - AsReadOnly() 方法
C# 数组 AsReadOnly() 方法用于返回指定数组的只读包装器。此方法可防止通过包装器修改数组元素,同时仍允许我们查看这些元素。
语法
以下是 C# 数组 AsReadOnly() 方法的语法 -
public static System.Collections.ObjectModel. Array.AsReadOnly<T> (T[] array);
参数
此函数接受一个一维数组(T[] 数组)作为参数,并将其包装在只读 (ReadOnlyCollection<T>) 包装器中。
返回值
此函数返回指定数组的只读包装器。
示例 1
让我们创建一个 AsReadOnly() 方法的基本示例来显示只读集合 -
using System; using System.Collections.ObjectModel; class Program { static void Main() { // 原始数组 int[] numbers = { 1, 2, 3, 4, 5 }; // 将数组包装为只读集合 ReadOnlyCollection<int> readOnlyNumbers = Array.AsReadOnly(numbers); // 显示只读集合 Console.WriteLine("Read-only collection elements:"); foreach (int num in readOnlyNumbers) { Console.WriteLine(num); } // 原始数组仍然可以修改 numbers[0] = 10; Console.WriteLine("After modifying the original array:"); foreach (int num in readOnlyNumbers) { Console.WriteLine(num); } } }
输出
以下是输出 -
Read-only collection elements: 1 2 3 4 5 After modifying the original array: 10 2 3 4 5
示例 2:自定义对象的只读集合
以下示例使用 AsReadOnly() 方法将自定义对象转换为只读集合 -
using System; using System.Collections.ObjectModel; class Person { public string Name { get; set; } public int Age { get; set; } public override string ToString() { return $"Name: {Name}, Age: {Age}"; } } class Program { static void Main() { // 自定义对象数组 (Person) Person[] people = new Person[] { new Person { Name = "Aman", Age = 25 }, new Person { Name = "Akash", Age = 30 }, new Person { Name = "Vikash", Age = 35 } }; // 将数组包装为只读集合 ReadOnlyCollection<Person> readOnlyPeople = Array.AsReadOnly(people); Console.WriteLine("Read-only collection of people:"); foreach (var person in readOnlyPeople) { Console.WriteLine(person); } } }
输出
以下是输出 -
Read-only collection of people: Name: Aman, Age: 25 Name: Akash, Age: 30 Name: Vikash, Age: 35
示例 3:如果您修改了只读集合
这是 AsReadOnly() 方法的另一个示例。如果您要修改只读集合,则会引发编译时错误 -
using System; using System.Collections.ObjectModel; class Person { public string Name { get; set; } public int Age { get; set; } public override string ToString() { return $"Name: {Name}, Age: {Age}"; } } class Program { static void Main() { // 自定义对象数组(Person) Person[] people = new Person[] { new Person { Name = "Aman", Age = 25 }, new Person { Name = "Akash", Age = 30 }, new Person { Name = "Vikash", Age = 35 } }; // 将数组包装为只读集合 ReadOnlyCollection<Person> readOnlyPeople = Array.AsReadOnly(people); // 尝试修改只读集合会引发异常 readOnlyPeople[0] = new Person { Name = "David", Age = 40 }; } }
输出
以下是输出 -
ERROR! Main.cs(31,9): error CS0200: Property or indexer 'ReadOnlyCollection<Person>.this[int]' cannot be assigned to -- it is read only