2

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

    ...

}
4

1 回答 1

3

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

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

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

于 2014-10-28T20:35:50.720 回答