将对象添加到HashSet属性时调用方法

时间:2018-12-06 13:24:22

标签: c# data-structures graph collections hashset

我正在用C#编写图形库。

这是我的Graph.cs:

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

    public HashSet<IEdge> Edges { get; set; }
}
  • 规则1:删除节点时,我想 删除节点所属的所有边缘,从中删除 IEdge的HashSet。
  • 规则2:添加 Edge 后,我想同时访问Edge中的两个Node实例。 实例添加到INode的HashSet。

如何获得这种行为?

现在,库用户只需使用:

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

n5和n6为Node实例,但g.Nodes HashSet中没有n5和n6。

我想知道是否有一种方法可以在将Edge实例添加到Edge的Setter属性中的HashSet 中时调用这样的方法

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

1 个答案:

答案 0 :(得分:2)

我不会直接暴露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".
}