C# 将对象添加到HashSet属性时调用方法
我正在用C#编写一个图形库 这是我的Graph.cs:C# 将对象添加到HashSet属性时调用方法,c#,data-structures,graph,collections,hashset,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; } } n5和n6是节点实例,但g.节点哈希集中没有n5和n6 我想知道,当边缘实例添加到边缘设置器属性的HashSet中时,是否有一种方法可以调用这样的方法: void Up
public class Graph : IGraph
{
public HashSet<INode> Nodes { get; set; }
public HashSet<IEdge> Edges { get; set; }
}
n5和n6是节点
实例,但g.节点哈希集中没有n5和n6
我想知道,当边缘实例添加到边缘设置器属性的HashSet中时,是否有一种方法可以调用这样的方法:
void UpdateNodes(IEdge edge)
{
Nodes.Add(edge.A_Node);
Nodes.Add(edge.Another_Node);
}
我同意不直接公开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".
}
公共类图:IGraph
{
私有HashSet_nodes=新HashSet();
私有HashSet_edges=新HashSet();
公共IEnumerable节点=>\u节点;
公共IEnumerable边=>\u边;
public void AddNode(INode node)=>\u nodes.Add(node);//在这里,您可以使用自己的自定义代码进行扩展。
公共void AddEdge(IEdge edge)=>_edges.Add(edge);
//在这里,您可以添加其他功能,例如“删除”。
}
我同意不直接公开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".
}
公共类图:IGraph
{
私有HashSet_nodes=新HashSet();
私有HashSet_edges=新HashSet();
公共IEnumerable节点=>\u节点;
公共IEnumerable边=>\u边;
public void AddNode(INode node)=>\u nodes.Add(node);//在这里,您可以使用自己的自定义代码进行扩展。
公共void AddEdge(IEdge edge)=>_edges.Add(edge);
//在这里,您可以添加其他功能,例如“删除”。
}
您可以通过实现INotifyCollectionChanged
接口来包装/扩展HashSet
。然后,订阅CollectionChanged
事件,并根据需要处理更改。HashSet
看起来不容易扩展,但您始终可以添加一个包装器来实现前面提到的INotifyCollectionChanged
。您可能想从中获得一些灵感,可以通过实现INotifyCollectionChanged
接口来包装/扩展HashSet
。然后,订阅CollectionChanged
事件,并根据需要处理更改。HashSet
看起来不容易扩展,但您始终可以添加一个包装器来实现所提到的INotifyCollectionChanged
。您可能想从中获得一些启示