我意识到自.NET 4.5以来ReadOnlyCollection<T>
类实现了新接口IReadOnlyCollection<T>
但是我被限制在没有这个的旧版本库中。
我想知道哪个更好被认为是最佳做法:
public sealed class OptionA {
/// <summary>
/// Gets a read-only list of numbers.
/// </summary>
public ReadOnlyCollection<int> SomeNumbers {
get { return new ReadOnlyCollection<int>(_someNumbers); }
}
...
}
public sealed class OptionB {
/// <summary>
/// Gets a read-only list of numbers.
/// </summary>
public IList<int> SomeNumbers {
get { return new ReadOnlyCollection<int>(_someNumbers); }
}
...
}
答案 0 :(得分:3)
您也可以使用IEnumerable<T>
- 在这种情况下,它会使您的代码尽可能松散耦合。它还提供ElementAt<T>
方法的随机访问,如果实际类型实现IList<T>
,它将与 O(1)复杂性一起使用:
如果源类型实现
IList<T>
,则该实现用于获取指定索引处的元素。否则,此方法获取指定的元素。
如果你真的想要强调具有恒定时间复杂性的随机访问这一事实,那么公开IList<T>
或ReadOnlyCollection<T>
会很有用。决定哪一个真正取决于特定场景。