方法一:使用 AsReadOnly 方法
List
示例代码
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
class Program
{
static void Main()
{
List originalList = new List { 1, 2, 3, 4, 5 };
// 转换为只读集合
ReadOnlyCollection readOnlyList = originalList.AsReadOnly();
// 可以读取但不能修改
foreach (int item in readOnlyList)
{
Console.WriteLine(item);
}
// 下面的代码将会编译错误,因为 readOnlyList 是只读的
// readOnlyList.Add(6);
// 对原始列表的修改仍然会影响到只读集合
originalList.Add(6);
Console.WriteLine("After adding to original list:");
foreach (int item in readOnlyList)
{
Console.WriteLine(item);
}
}
}
方法二:使用 LINQ 创建新的只读集合
如果你希望创建一个完全独立的只读集合(即原始列表的修改不影响新集合),可以使用 LINQ 的 ToList 方法结合 AsReadOnly,或者直接使用 Array.AsReadOnly 将列表转换为数组再包装为只读集合。
示例代码
使用 ToList 和 AsReadOnly:
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
class Program
{
static void Main()
{
List originalList = new List { 1, 2, 3, 4, 5 };
// 创建一个新的列表并转换为只读集合
ReadOnlyCollection readOnlyList = originalList.ToList().AsReadOnly();
// 可以读取但不能修改
foreach (int item in readOnlyList)
{
Console.WriteLine(item);
}
// 对原始列表的修改不会影响到新的只读集合
originalList.Add(6);
Console.WriteLine("After adding to original list:");
foreach (int item in readOnlyList)
{
Console.WriteLine(item);
}
}
}
使用 Array.AsReadOnly:
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
class Program
{
static void Main()
{
List originalList = new List { 1, 2, 3, 4, 5 };
// 将列表转换为数组再包装为只读集合
ReadOnlyCollection readOnlyList = Array.AsReadOnly(originalList.ToArray());
// 可以读取但不能修改
foreach (int item in readOnlyList)
{
Console.WriteLine(item);
}
// 对原始列表的修改不会影响到新的只读集合
originalList.Add(6);
Console.WriteLine("After adding to original list:");
foreach (int item in readOnlyList)
{
Console.WriteLine(item);
}
}
}
结论
在 C# 中,将 List