返回List <String>以便调用者无法修改它

Ahm*_*med 1 c#

List<string>作为属性公开,但希望避免在对象之外进行修改.在C#中执行此操作的最佳方法是什么,我是否创建了新副本List<string>或执行其他操作.

sll*_*sll 6

这种List<T>类型无法实现.最好的方法是暴露ReadOnlyCollection<T>类型的原型(MSDN).

您可以认为它显式实现了ICollection暴露Add()方法的接口,但不要担心并记住:

ICollection.Add

将项添加到ICollection.此实现始终抛出NotSupportedException.

顺便说一句,为什么你需要List<T>打字?也许暴露出类型的属性IEnumerable<T>List<T>您使用的是哪种特定功能,可能是在排序/搜索方法中构建的?无论如何,如果你真的需要List<T>- 你可以使用它作为属性支持字段的类型,并通过ReadonlyCollection<T>(IList<T> list)构造函数或使用List<T>.AsReadonly()方法调用转换它,真的没有区别,因为AsReadonly()它是单行方法return new ReadOnlyCollection<T>(this);.