ReadOnlyCollection IEnumerable

puf*_*ish 8 .net c# linq

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经看到一些关于不使用数组用于公共属性的讨论.我一直在使用" MyStrings2公约".有什么理由我应该使用MyStrings1吗?

EL *_*bov 14

简而言之:我认为您的问题是由Jon Skeet - ReadOnlyCollection或IEnumerable用于公开成员集合的完美答案所涵盖的

另外: 你可以模仿AsReadOnly():

public ReadOnlyCollection<Abc> List
{
    get { return new ReadOnlyCollection(list); }
}
Run Code Online (Sandbox Code Playgroud)

更新:
这不会创建副本list.ReadOnlyCollection不复制数据,它直接在提供的列表上工作.见文档:

只读集合只是一个带有包装器的集合,可以防止修改集合; 因此,如果对基础集合进行了更改,则只读集合会反映这些更改.

该构造函数是O(1)操作.