可能重複:
Can’t operator == be applied to generic types in C#?使用通用鍵在節點結構中查找子節點?
我有我試圖使一個查找方法 「GenericNode」 -parent /子結構。
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:是同一類型的?
我可以創建一個Guid for key的派生類,並將GetChildNodeById移動到該類,但如果可能的話,我想要一個通用的解決方案。有什麼想法嗎?
我不確定這是相關的:http://stackoverflow.com/a/6380001/555547。改變'=='爲'.Equals()'爲我編譯它。祝你好運! – Jason
我是個白癡,Equals()做了這個把戲,Raphaëls鏈接解釋了爲什麼。 – antirysm