【发布时间】:2016-11-01 17:12:50
【问题描述】:
在 C# 中:有没有办法像在 C++ 中一样定义 List const/readonly 的内容?
C++ 示例:
List<const Content> listWithConstContent;
【问题讨论】:
-
C# 不支持这样的不变性。
-
System.Collections.Immutable 有一个预发布版本,其中包含 ImmutableList
。我还没有尝试过,但 MS 说你可以从 Nuget 获得它。 -
可能最接近的东西是 ReadOnlyCollection msdn.microsoft.com/en-us/library/ms132474(v=vs.110).aspx .. 虽然远非完美
-
C# 中没有“常量引用”。我的建议是,您使用所有“阅读器”方法创建一个公共接口,让
Content实现该接口,然后分发List<IReadOnlyContent>。然后将Content设为内部类型。因此,现在您的内部代码可以随心所欲地处理您想要的内容,但外部代码只能通过公共接口获取。 -
@tommy_tee:C/C++ 中的 Const 存在严重缺陷。它不能保证我真正想要的。所有 const 参考都说“你不能改变这个”,但我想要的保证是“这不会改变”。但它确实施加了我不想要的限制;例如,它施加了一个限制,即我不能将纯 const 方法重构为通过更新私有 memoizer 来实现的方法。有比将 const 放入类型系统更好的方法来实现不变性保证。