Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将对象添加到HashSet属性时调用方法_C#_Data Structures_Graph_Collections_Hashset - Fatal编程技术网

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

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

我正在用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 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
。您可能想从中获得一些启示