为什么InlineCollection不提供索引器(没有转换)?

时间:2014-12-29 14:17:04

标签: .net text flowdocument random-access indexer

我正在使用InlineCollection,其行为类似于有序集合。

它实现了IList interface,暗示它适合随机访问项目。但是,indexer defined by that interface仅作为explicit interface implementation提供(意味着需要将InlineCollection类型的表达式强制转换为IList以使用索引器。)

虽然documentation没有提到任何特定内容(它似乎只包含列表索引器的默认文本),而我自己的测试似乎没有出现任何意外行为,我现在担心索引器是因某种原因无法直接访问,例如,在某些情况下,列表中的项目会自动合并或拆分。

是否有一个特定原因导致InlineCollection的索引器不应该被使用,或者API恰好最终会像这样结束,我们必须接受显式转换? < / p>

编辑:对于.NET 3.0.NET 3.5,文档甚至仍明确建议不要使用索引器:

  

此类型或成员支持Windows Presentation Foundation(WPF)基础结构,不能直接在您的代码中使用。

EDIT2:强调这个问题;我可以使用LINQ extension methods for enumerablesElementAt,但是根据实现情况,如果这些方法可以将对象强制转换为{{1},那么这些方法可能会利用索引器所以我想知道这些扩展是否可以安全地与IList一起使用。

1 个答案:

答案 0 :(得分:2)

非常有趣的问题。

我认为它因某些特定行为而被隐藏,但我也找不到任何参考。您可以检查TextElementCollection类的源代码,您将在第564行看到索引运算符已实现,但作为私有方法。

Source Code

当然,我们可以分析源代码并检查用法是否会导致意外行为。