我想创建一个通用类 Node,如下所示:
public class Node<T>
{
public Node<T> Next;
public Node<T> Previous;
T Content;
public Node<T>()
{
}
}
在我的主要类(class)(或其他类(class))中,我想比较项目.. 类似于以下内容:(我使用伪代码来说明我的想法,代码可能有效也可能无效)。基本上我想知道我拥有的项目是否在列表中。
main()
{
List<Node<T>> n = new List<Node<T>>()
bool found = false;
T v = new T();
foreach (Node<T> i in n)
{
if i.Content== v
{
found = true;
}
}
}
我知道为了比较一个类的两个实例,我必须从 IEquitable 派生我的类,但我想知道 T 是否属于我们一直使用的预定义类,如 int、double、string ...我不想重新定义这些类,但希望比较能够正常工作并使用默认比较器。我如何编写上面的代码以便 c# 接受它并抛出语法错误?
if i.Content== v
{
found = true;
}
我试过了
if (T)i.Content == (T)v
{
...
}
编译器似乎不喜欢它。 实际上,我做了以下事情:
Node<T> r = n.Where(x=> (T)x.Content==(T)v).FirstOrDefault()
我得到的错误是: 运算符 == 无法应用于“T”和“T”类型的操作数 请指教。 谢谢!
最佳答案
您可以使用 IEqualityComparer<T>
:
var comp = EqualityComparer<T>.Default;
if (comp.Equals(i.Content, v)) {
...
}
关于c# - 通用类比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40936418/