据我所知.NET4.0仍然缺少只读列表.为什么框架仍然缺少这种功能?这不是domain-driven design人最常见的功能之一吗?

One of the few advantages Java has over C# is this in the form of the Collections.unmodifiablelist(list) method, which it seems is long overdue in IList<T> or List<T>.

使用IEnumerable<T>是问题的最简单解决方案,可以使用ToList并返回一份副本.

推荐答案

您要找的是ReadOnlyCollection,从.NET2开始就有了.

IList<string> foo = ...;
// ...
ReadOnlyCollection<string> bar = new ReadOnlyCollection<string>(foo);

List<string> foo = ...;
// ...
ReadOnlyCollection<string> bar = foo.AsReadOnly();

这将创建一个只读的view,它反映对包装的集合所做的更改.

.net相关问答推荐

F#:跨度、提升和底部类型(或缺乏)

为什么 GetShortestDayName 返回的名称比预期的短?

在接口内部声明 IEnumerable 而在具体类中声明 IList

无法实例化类的代理:System.Net.HttpWebRequest.找不到无参数构造函数

如何在 ASP.NET Core 中使用 Bootstrap 4

.NET Framework SDK 和 Targeting 包有什么区别

(C# 7.2)“私人保护”修饰符的用例是什么?

为什么无穷大在 Windows 10 控制台中打印为“8”?

为什么具有可为空值的结构的 HashSet 非常慢?

ASP.NET Core 等效于 ASP.NET MVC 5 的 HttpException

为什么 !0 是 Microsoft 中间语言 (MSIL) 中的一种类型?

为什么递增 Nullable 不会引发异常?

EnsureSuccessStatusCode 的使用和它抛出的 HttpRequestException 的处理

写入 Windows 应用程序事件日志(log)

使用 C# 设置全局热键

如何将 VB 项目转换为 C# 项目

创建堆栈大小为默认值 50 倍的线程时有什么危险?

如何找到特定 dll 的 PublicKeyToken?

161803398 是一个“特殊”号码吗? Math.Random() 内部

为什么 HttpClient BaseAddress 不起作用?