我遇到了极不可能的原始情况,即想要从我的属性(property)中返回一个只读数组。到目前为止,我只知道一种方法-通过System.Collections.ObjectModel.ReadOnlyCollection.但这对我来说似乎有点尴尬,更不用说这个类失去了通过索引访问数组元素的能力(补充:糟糕,我错过了索引器)。有没有更好的办法?可以使数组本身不可变的东西? 最佳答案 使用ReadOnlyCollection.它是只读的,而且与您所相信的相反,它有一个索引器。数组不是不可变的,如果不使用像ReadOnlyCollection
我花了好几个小时思考公开列表成员的主题。在与我类似的问题中,JonSkeet给出了很好的答案。请随时查看。ReadOnlyCollectionorIEnumerableforexposingmembercollections?我通常对公开列表非常偏执,尤其是当您正在开发API时。我一直使用IEnumerable来公开列表,因为它非常安全,而且它提供了很大的灵active。让我在这里举个例子:publicclassActivity{privatereadonlyIListworkItems=newList();publicstringName{get;set;}publicIEnumer
我花了好几个小时思考公开列表成员的主题。在与我类似的问题中,JonSkeet给出了很好的答案。请随时查看。ReadOnlyCollectionorIEnumerableforexposingmembercollections?我通常对公开列表非常偏执,尤其是当您正在开发API时。我一直使用IEnumerable来公开列表,因为它非常安全,而且它提供了很大的灵active。让我在这里举个例子:publicclassActivity{privatereadonlyIListworkItems=newList();publicstringName{get;set;}publicIEnumer
如果调用代码仅遍历集合,是否有任何理由将内部集合公开为ReadOnlyCollection而不是IEnumerable?classBar{privateICollectionfoos;//Whichoneistobepreferred?publicIEnumerableFoos{...}publicReadOnlyCollectionFoos{...}}//Callingcode:foreach(varfinbar.Foos)DoSomething(f);在我看来,IEnumerable是ReadOnlyCollection接口(interface)的一个子集,它不允许用户修改集合。因
如果调用代码仅遍历集合,是否有任何理由将内部集合公开为ReadOnlyCollection而不是IEnumerable?classBar{privateICollectionfoos;//Whichoneistobepreferred?publicIEnumerableFoos{...}publicReadOnlyCollectionFoos{...}}//Callingcode:foreach(varfinbar.Foos)DoSomething(f);在我看来,IEnumerable是ReadOnlyCollection接口(interface)的一个子集,它不允许用户修改集合。因
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭9年前。Improvethisquestion查看ReadOnlyCollection的规范类,它确实实现了IList界面,对吧。IList接口(interface)有Add/Update/Read方法,我们称之为接口(interface)的前置条件。如果我有一个IList,我的应用程序中的任何地方都应该能够执行所有此类操作。但是如果我在代码中的某处返回一个ReadOnlyCollection并尝试调用.Add(...)方法呢?它抛出
Liskov替换原则要求子类型必须满足父类(superclass)型的契约。以我的理解,这将需要ReadOnlyCollection违反利斯科夫。ICollection的契约(Contract)暴露Add和Remove操作,但只读子类型不满足此契约(Contract)。例如,IListcollection=newList();collection=newSystem.Collections.ObjectModel.ReadOnlyCollection(collection);collection.Add(newobject());--notsupportedexception显然需要不
.NET4.5有一个新的命名空间System.Collections.ImmutableThispackageprovidescollectionsthatarethreadsafeandguaranteedtoneverchangetheircontents,alsoknownasimmutablecollections.我很困惑。线程安全问题不是已经被ReadOnlyCollection解决了吗?类(class)?为什么使用ImmutableList相反?我知道还有一个IReadOnlyListinterface.这并没有隐含地解决线程安全问题,因为其他线程可能会通过另一个接口(i