解决方法
public IEnumerable<object> Objects { get { return obs.Select(o => o); } }
既然您表示只想要遍历列表,那么这就是您所需要的.
有人可能会想要返回List< object>直接作为IEnumerable< T>,但这是不正确的,因为可以容易地检查IEnumerable< T>在运行时,确定它是List< T>并将其投射到这样并改变内容.
但是,通过使用return obs.Select(o => o);你最终在List< object>上返回一个迭代器,而不是对List< object>的直接引用.本身.
根据C#语言规范的第7.15.2.5节,有些人可能会认为这符合“退化表达式”.但是,Eric Lippert goes into detail as to why this projection isn’t optimized away.
此外,人们建议使用AsEnumerable extension method.这是不正确的,因为保留了原始列表的参考标识.从文档的备注部分:
The
AsEnumerable<TSource>(IEnumerable<TSource>)
method has no effect other than to change the compile-time type of source from a type that implementsIEnumerable<T>
toIEnumerable<T>
itself.
换句话说,它所做的只是将源参数转换为IEnumerable< T>,这无助于保护参考完整性,返回原始引用并且可以将其转换回List< T>.并用于改变列表.
原文地址:https://www.jb51.cc/csharp/98969.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。