将IList <t>或ReadOnlyCollection <t>公开给只读属性?</t> </t>

时间:2014-10-28 18:40:12

标签: .net mono readonly-collection

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

    ...

}

1 个答案:

答案 0 :(得分:3)

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

  

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

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