Вызов метода, когда объект добавляется в свойство HashSet - PullRequest
0 голосов
/ 06 декабря 2018

Я пишу библиотеку графов на C #.

Вот мой Graph.cs:

public class Graph : IGraph
{
    public HashSet<INode> Nodes { get; set; }

    public HashSet<IEdge> Edges { get; set; }
}
  • Правило 1: при удалении узла , Я хочу, чтобы все ребра, которые были удалены из них, были удалены из HashSet в IEdge.
  • Правило 2: Когда Edge добавлен , я хочу, чтобы оба экземпляра узла вEdge instanse добавить в HashSet из INode.

Что я могу сделать для получения этого поведения?

Теперь пользователь библиотеки просто использует:

g.Edges.Add(new Edge(n5, n6));

, чтоn5 и n6 являются Node инстансами, но в g.Nodes HashSet нет n5 и n6.

Мне было интересно, можно ли как-нибудь вызвать такой метод, когда в Edge инстанс добавляетсяHashSet в свойстве Setter of Edges :

void UpdateNodes(IEdge edge)
{
     Nodes.Add(edge.A_Node);
     Nodes.Add(edge.Another_Node);
}

1 Ответ

0 голосов
/ 06 декабря 2018

Я бы не стал напрямую выставлять коллекции HashSet.

public class Graph : IGraph
{
    private HashSet<INode> _nodes = new HashSet<INode>(); 
    private HashSet<IEdge> _edges = new HashSet<IEdge>();

    public IEnumerable<INode> Nodes => _nodes;
    public IEnumerable<IEdge> Edges => _edges;

    public void AddNode(INode node) => _nodes.Add(node); //Here you can extend with your own custom code.
    public void AddEdge(IEdge edge) => _edges.Add(edge);

    //Here you add other functions such as perhaps "Remove".
}
...