【发布时间】:2012-11-26 09:17:27
【问题描述】:
我有一个“GenericNode”-父/子结构,我正在尝试为其创建一个 Find 方法。
public class GenericNode<TKey, TName>
{
private GenericNode<TKey, TName> parent;
private readonly TKey key;
private readonly TName name;
private readonly ICollection<GenericNode<TKey, TName>> children;
public GenericNode(TKey key, TName name) {
this.key = key;
this.name = name;
children = new Collection<GenericNode<TKey, TName>>();
}
// AddChild etc...
public GenericNode<TKey, TName> GetChildNodeById(TKey keyToFind)
{
return FindChild(node => node.key == keyToFind); // <--- THIS WON'T COMPILE
}
private GenericNode<TKey, TName> FindChild(Func<GenericNode<TKey, TName>, Boolean> matcher)
{
// Recursive search returning first matching node...
}
}
上述 (C# .NET 3.5) 不起作用,因为它无法在 GetChildNodeById 方法中将 node.key 与 keyToFind 进行比较。我一直在尝试不同的通用约束等,但没有运气。如何指定 TKey:s 是同一类型?
我可以创建一个带有 Guid 作为键的派生类,并将 GetChildNodeById 移动到该类,但如果可能的话,我想要一个通用的解决方案。有什么想法吗?
【问题讨论】:
-
我不确定这是否相关:stackoverflow.com/a/6380001/555547。将
==更改为.Equals()为我编译了它。祝你好运! -
我是个白痴,Equals() 成功了,Raphaëls 链接解释了原因。