如何限制将项目添加到List <T>?

Pra*_*dda 4 c# properties list code-access-security

我有一个名为Person包含属性的父类,父亲和儿童名单.

我希望每个人只使用AddChildMethod来添加子项,而不是List.Add方法,所以我如何限制它的使用?

public class Person
{
  private List<Person> _children = new List<Person>();
  public string Name { get; set; }
  public Person Father { get; set; }
  public List<Person> Children 
  { 
    get
    {
       return _children;
    } 
  }
  public void AddChild(string name)
  {
      _children.Add( new Person { Name = name, Father = this });
  }
}
Run Code Online (Sandbox Code Playgroud)

Paw*_*ski 12

将子项公开为ReadOnlyCollection:

public IList<Person> Children  
{  
    get 
    { 
       return new ReadOnlyCollection<Person>(_children);
    }  
} 
Run Code Online (Sandbox Code Playgroud)


Ale*_*ort 8

暴露ChildrenIEnumerable<T>


Tho*_*ler 8

将您的Children属性更改为:

public IList<Person> Children 
{ 
  get
  {
     return _children.AsReadOnly();
  } 
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*ell 7

如果你暴露底层List<T>,那么简而言之:你不能.

你可以编写自己的集合包装类,或者可以继承Collection<T>(它仍然可以公开Add,但你可以override在添加之前检测数据).