无法将lambda表达式转换为预期的委托类型

时间:2016-11-12 00:21:17

标签: c# lambda

我正在尝试创建Graph数据结构并使用拓扑排序对其进行排序。我的代码如下:




  public class Node< T>
 {
 //私有成员变量
私人T数据;
私有NodeList< T> neighbors = null;

 public Node(){}
 public Node(T data):this(data,null){}
公共节点(T数据,NodeList< T>邻居)
 {
 this.data = data;
 this.neighbors = neighbors;
 }

公共T值
 {
让
 {
返回数据;
 }
设定
 {
 data = value;
 }
 }

受保护的NodeList< T>邻居
 {
让
 {
返回邻居;
 }
设定
 {
 neighbors = value;
 }
 }
}

公共类NodeList< T> :List< Node< T>>
 {
 public NodeList():base(){}

公共节点< T> FindByValue(T值)
 {
 //在列表中搜索值
 foreach(节点< T>节点)
 if(node.Value.Equals(value))
返回节点;

 //如果我们到达这里,我们找不到匹配的节点
 return null;
 }
}

公共类GraphNode< T> :节点< T>
 {
私人名单< int> costs = null;

 public GraphNode():base()
 {
 }

 public GraphNode(T value):base(value)
 {
 }
 public GraphNode(T value,NodeList< T> neighbors):base(value,neighbors)
 {
 }

新的公共NodeList< T>邻居
 {
让
 {
 if(base.Neighbors == null)
 base.Neighbors = new NodeList< T>();
 return base.Neighbors;
 }
 }

公共列表< int>成本
 {
让
 {
 if(成本== null)
 costs = new List< int>();
退货成本;
 }
 }
}

公共类图< T>
 {
私有NodeList< T>节点集;
公共列表< GraphNode< T>>排序(图形< T>图形,Func< GraphNode< T>,IEnumerable< GraphNode< T>>>邻居)
 {
 var sorted = new List< GraphNode< T>>();
 var visited = new Dictionary< GraphNode< T&gt ;, bool>();

 foreach(graph.Nodes中的var项)
 {
 var _tempItem = item as GraphNode< T>;
访问(_tempItem,邻居,排序,访问);
 }

返回排序;
 }

 public void访问(GraphNode< T>项,Func< GraphNode< T>,IEnumerable< GraphNode< T>>>邻居,列表< GraphNode< T>>已排序,字典< GraphNode< T>,bool>已访问) 
 {
 bool inProcess = false;
 var alreadyVisited = visited.TryGetValue(item,out inProcess);

 if(alreadyVisited)
 {
 if(inProcess)
 {
抛出新的异常(“找到循环依赖”。);
 }
 }
否则
 {
访问过[item] = true;

 var dependencies = neighbors(item);
 if(dependencies!= null)
 {
 foreach(依赖关系中的var依赖关系)
 {
访问(依赖,邻居,排序,访问);
 }
 }

访问过[item] = false;
 sorted.Add(项目);
 }
 }
}
  




对Sort方法的调用如下:


&#xA ;
  List< GraphNode< string>> lstSorted = _graph.Sort(_graph,x => x.Neighbors);
  




但我在调用中遇到以下错误for x.Neighbors





无法将lambda表达式转换为预期的委托类型,因为块中的某些返回类型不能隐式转换为委托返回类型





有人可以告诉我如何解决此问题吗?




0 个答案:

没有答案