遵循公共 API 永远不应该返回列表的规则,我正在盲目转换所有返回列表的代码,以返回ICollection<T>
:
public IList<T> CommaSeparate(String value) {...}
变成
public ICollection<T> CommaSeparate(String value) {...}
尽管 anICollection
具有Count
,但无法通过该索引获取项目。
尽管 anICollection
公开了一个枚举器(允许foreach
),但我认为不能保证枚举的顺序从列表的“顶部”开始,而不是“底部”。
我可以通过避免使用来缓解这种情况ICollection
,而是使用Collection
:
public Collection<T> Commaseparate(String value) {...}
这允许使用Items[index]
语法。
不幸的是,我的内部实现构造了一个数组;可以将其转换为 return IList
or ICollection
,但不能转换为Collection
.
有没有办法按顺序访问集合中的项目?
这就引出了一个更广泛的问题:ICollection甚至有订单吗?
从概念上讲,假设我想解析一个命令行字符串。保持项目的顺序至关重要。
从概念上讲,我需要一个指示“有序”字符串元组集的合同。在 API 合约的情况下,为了指示顺序,以下哪项是正确的:
IEnumerable<String> Grob(string s)
ICollection<String> Grob(string s)
IList<String> Grob(string s)
Collection<String> Grob(string s)
List<String> Grob(string s)