【发布时间】:2019-03-22 05:52:23
【问题描述】:
让我们来上课吧:
ExampleClass
{
public List<string> MyValue { get; set; }
}
问题是如何限制外部类修改该属性,意味着将对象添加到集合中,生成 new()。
【问题讨论】:
标签: c#
让我们来上课吧:
ExampleClass
{
public List<string> MyValue { get; set; }
}
问题是如何限制外部类修改该属性,意味着将对象添加到集合中,生成 new()。
【问题讨论】:
标签: c#
你可以有这样的东西
public ReadOnlyCollection<string> MyValue {get; private set;}
【讨论】:
您可以将其公开为 IEnumerable<string> 而不是列表。此接口不允许添加。您仍然可以在内部将其存储为列表,作为私有字段,以便类本身可以根据需要添加或删除。
例如:
class ExampleClass
{
private List<string> _myValue = new List<string>();
public IEnumerable<string> MyValue
{
get
{
foreach (var s in _myValue) yield return s;
}
}
}
如果调用者想使用自己的列表,它当然可以这样做:
var list = exampleClass.MyValue.ToList();
此时调用者拥有它,很明显它选择添加的任何内容都与原始列表无关。
【讨论】: