公开 IList<T> 或 ReadOnlyCollection<T> for Read-Only Property?



我意识到,从.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); }
    }
    ...
}

您也可以使用IEnumerable<T>——在这种情况下,它将使您的代码尽可能松散地耦合。它还提供了ElementAt<T>方法的随机访问,如果实际类型实现IList<T>:,该方法将在O(1)复杂性下工作

如果源的类型实现IList<T>,则该实现用于获取指定索引处的元素。否则,此方法将获得指定的元素。

如果您真的想强调具有恒定时间复杂性的随机访问是可用的,那么公开IList<T>ReadOnlyCollection<T>可能会很有用。决定哪一个真正取决于特定的场景。

最新更新