C# 图表每次迭代的邻接

C# 图表每次迭代的邻接,c#,graph,foreach,ienumerable,enumerator,C#,Graph,Foreach,Ienumerable,Enumerator,我正在设计一个图形类(列表和矩阵实现)。我必须提供方法,例如getadjaccies(int-vertex) 首先,我想到返回IEnumerable,这样我就可以使用foreach语句迭代结果。但在接下来的一刻,我意识到这是一个可怕的解决方案,因为每次getAdjaccines(int-vertex)发生时都必须创建新的列表 接下来,我考虑返回枚举数,但这样我就无法使用foreach语句遍历结果。但是效率要高得多(我将实现许多图形算法,我对优化非常感兴趣) 您能告诉我在C#中执行此操作的正确方法

我正在设计一个图形类(列表和矩阵实现)。我必须提供方法,例如
getadjaccies(int-vertex)

首先,我想到返回
IEnumerable
,这样我就可以使用
foreach
语句迭代结果。但在接下来的一刻,我意识到这是一个可怕的解决方案,因为每次
getAdjaccines(int-vertex)
发生时都必须创建新的列表

接下来,我考虑返回
枚举数
,但这样我就无法使用
foreach
语句遍历结果。但是效率要高得多(我将实现许多图形算法,我对优化非常感兴趣)


您能告诉我在C#中执行此操作的正确方法是什么吗?

您不必每次调用该方法时都创建新列表。例如,使用迭代器块:

public IEnumerable<int> GetAdjacencies(int vertex)
{
    foreach (int i in adj[vertex])
        yield return i;
}
public IEnumerable GetAdjaccies(int顶点)
{
foreach(inti在adj[顶点])
收益率i;
}
我不知道图形在您的代码中是如何精确表示的,因此获取邻接列表的详细信息可能会有所不同。

您的代码编译:)因此现在我怀疑我是否理解
yield
关键字的含义。你能给我解释一下它在当前环境下的作用吗?请看这里的例子:血淋淋的细节:)