10 .net c# ienumerable
如果我将一个类IEnumerable<T>作为一个类的属性公开,它是否有可能被一个类的用户变异,如果是这样,什么是防止变异的最佳方法,同时保持暴露属性的类型IEnumerable<T>?
Jon*_*eet 14
这取决于你的回归.如果你返回(比方说)一个mutable,List<string>那么客户端确实可以将它转回List<string>并改变它.
如何保护您的数据取决于您必须从哪开始.ReadOnlyCollection<T>是一个很好的包装类,假设你有一个IList<T>开始.
如果您的客户端将无法从返回值实现受益IList<T>或者ICollection<T>,你总是可以这样做:
public IEnumerable<string> Names
{
get { return names.Select(x => x); }
}
Run Code Online (Sandbox Code Playgroud)
它有效地将集合包装在迭代器中.(有各种不同的方法可以使用LINQ来隐藏源代码......虽然没有记录哪些操作符隐藏了源代码,哪些代码却没有.例如,调用Skip(0) 会隐藏Microsoft实现中的源代码,但没有记录要做所以.)
Select绝对应该隐藏源头.
| 归档时间: |
|
| 查看次数: |
2906 次 |
| 最近记录: |