比如说,我们有一个带有私有(private)列表的通用类。 我们至少可以通过两种方式让它返回此列表的只读包装器:
public class Test<T>
{
public List<T> list = new List<T>();
public IEnumerable<T> Values1
{
get
{
foreach (T i in list)
yield return i;
}
}
public IEnumerable<T> Values2
{
get
{
return list.AsReadOnly();
}
}
}
Values1
和 Values2
都反射(reflect)了底层集合中的任何变化,并防止它通过自身进行修改。
哪种方式更可取?应该注意什么?或者还有其他更好的方法吗?
最佳答案
如果只有一个 IEnumerable<T>
是输出所必需的,我更喜欢:
public IEnumerable<T> Values
{
return this.list.AsReadOnly();
}
自 ReadOnlyCollection<T>
工具 IEnumerable<T>
,这为您的对象提供了一个安全的包装器,同时仍然灵活高效,并防止强制转换能够设置值。
如果您决定需要在结果中做一些不同的事情,您以后可以随时更改内部实现。
关于c# - 返回 List<T> 的只读包装器的哪种方式更可取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12683352/