string[] _myStrings = { "Hello", "There", "Happy", "Day" };

public IEnumerable<string> MyStrings1
{
    get
    {
        return new System.Collections.ObjectModel.ReadOnlyCollection<string>(_myStrings);
    }
}

public IEnumerable<string> MyStrings2
{
    get
    {
        return from s in _myStrings select s;
    }
}

我已经看到了一些关于不将数组用于公共(public)属性的讨论。
我一直在使用MyStrings2约定。我是否应该使用MyStrings1代替某些原因?

最佳答案

简而言之:我认为您的问题已经由Jon Skeet给出了一个非常好的答案-ReadOnlyCollection or IEnumerable for exposing member collections?
另外:
您可以只模仿AsReadOnly():

public ReadOnlyCollection<Abc> List
{
    get { return new ReadOnlyCollection(list); }
}
UPDATE :
这不会创建list的副本。 ReadOnlyCollection不复制数据,而是直接在提供的列表上工作。参见documentation:

关于c# - ReadOnlyCollection IEnumerable,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14104674/

10-10 19:46