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/