C# 泛型类比较

C# 泛型类比较,c#,generics,C#,Generics,我想创建一个通用类节点,如下所示: public class Node<T> { public Node<T> Next; public Node<T> Previous; T Content; public Node<T>() { } } 我试过了 if (T)i.Content == (T)v { ... } 编译器似乎不喜欢它。 实际上,我做了以下工作: Node<T> r = n.Where

我想创建一个通用类节点,如下所示:

public class Node<T>
{
  public Node<T> Next;
  public Node<T> Previous;
  T Content;

  public Node<T>()
  {
  }
}
我试过了

if (T)i.Content == (T)v 
{
  ...
}
编译器似乎不喜欢它。 实际上,我做了以下工作:

 Node<T> r = n.Where(x=> (T)x.Content==(T)v).FirstOrDefault()
public class Node<T> where T : IEquatable<T>
Node r=n.Where(x=>(T)x.Content==(T)v).FirstOrDefault()
我得到的错误是: 运算符==无法应用于“T”和“T”类型的操作数 请告知。
谢谢

> P>在泛型约束中没有指定运算符的方法(除了参数较少的构造函数,如果您认为它是运算符)。< /P>
如果你需要某种比较方法,你需要使用一种方法。要么使用<代码>等于,要么添加一些接口,如<代码>可比较的< /代码>作为泛型约束。

< P>在泛型约束中无法指定运算符(除了参数较少的构造函数,如果您认为是运算符)。< /P>
如果你需要某种比较方法,你需要使用一种方法。使用
Equals
,或添加一些接口,如
IComparable
,作为通用约束。

您可以使用
iQualityComparer

var comp=EqualityComparer.Default;
如果(成分等于(i.含量,v)){
...
}

您可以使用
IEqualityComparer

var comp=EqualityComparer.Default;
如果(成分等于(i.含量,v)){
...
}

您可以将
节点
声明更改为以下内容:

 Node<T> r = n.Where(x=> (T)x.Content==(T)v).FirstOrDefault()
public class Node<T> where T : IEquatable<T>

您可以将
节点
声明更改为以下内容:

 Node<T> r = n.Where(x=> (T)x.Content==(T)v).FirstOrDefault()
public class Node<T> where T : IEquatable<T>

Try.Equals而不是==你真的在代码中使用
T
作为你的类型吗?Try.Equals而不是==你真的在代码中使用
T
作为你的类型吗?这太棒了!正是我想要的!顺便说一句,Abion47解决方案似乎也能奏效。他的声明更明确一点?可惜我不能把这两个都标为答案。这太棒了!正是我想要的!顺便说一句,Abion47解决方案似乎也能奏效。他的声明更明确一点?很遗憾我不能把两者都标为答案。你的建议似乎也行。。非常感谢。你们太棒了!你的建议似乎也行。。非常感谢。你们太棒了!