如果我有一个包含例如List< string>的类。我希望其他类能够看到列表但不能设置它,我可以声明
public class SomeClass()
{
public List<string> SomeList { get; }
}
这将允许另一个类访问SomeList而不设置它。
但是,虽然调用类不能设置列表,但它可以添加或删除元素。我该如何预防呢?我想我可以使用一个字段并返回List的副本而不是使用属性,但这感觉不对。
(这应该很简单但我必须遗漏一些东西......)
答案 0 :(得分:14)
您将无法使用autoproperty。
public class SomeClass()
{
private List<string> someList;
public IList<string> SomeList {
get { return someList.AsReadOnly(); }
}
}
答案 1 :(得分:4)
您希望将列表作为ReadOnly list返回。您可以使用以下代码执行此操作:
using System.Collections.ObjectModel;
public ReadOnlyCollection<string> GetList() {
return SomeList.AsReadOnly();
}
答案 2 :(得分:2)
返回IEnumerable<string>
,这是不可变的。吸气剂应如下所示:
public IEnumerable<string> SomeList
{
get
{
foreach(string s in someList) yield return s; // excuse my inline style here, zealots
yield break;
}
}
答案 3 :(得分:0)
public class SomeClass()
{
private List<string> _someList = new List<string>();
public IList<string> SomeList
{
get { return _someList.AsReadOnly(); }
}
}