![]() |
1
12
你会把它作为
既然你说你只想要 遍历 在名单中,这是你所需要的。
你可能会想把
但是,通过使用
有些人可能认为,根据C语言规范第7.15.2.5节,这符合“退化表达式”的条件。然而, Eric Lippert goes into detail as to why this projection isn't optimized away 。 而且,人们建议人们使用 AsEnumerable extension method . 这是不正确的,因为保留了原始列表的引用标识。从文件的备注部分: 这个
换句话说,它所做的只是将源参数强制转换为
|
![]() |
2
11
你可以用
|
![]() |
3
3
这已经说过了,但我不认为任何答案是超级清楚的。 最简单的方法是简单地返回readonlycollection
这样做的缺点是,如果以后要更改实现,则某些调用方可能已经依赖于这样一个事实,即集合提供随机访问。所以更安全的定义是公开一个IEnumerable
请注意,不必调用asreadonly()来编译此代码。但如果你不这样做,调用者我只是把返回值转换回一个列表并修改你的列表。
同样的潜在问题也存在于这个解决方案中
所以我建议您在列表中调用asreadonly()并返回该值。 |
![]() |
4
2
在接口中添加以下方法签名: 公共IEnumerable遍历列表() 按此类推:
这将允许您执行以下操作:
yield返回告诉编译器为您构建一个枚举器。 |
![]() |
5
2
您可以通过两种方式执行此操作:
|
![]() |
6
1
揭露一
|
![]() |
7
1
关于这个问题的有趣的帖子和对话: http://davybrion.com/blog/2009/10/stop-exposing-collections-already/ 。 |
![]() |
8
0
您是否考虑过从System.Collections.ReadOnlyCollectionBase派生类? |