gpt4 book ai didi

c# - 通用类比较

转载 作者:太空宇宙 更新时间:2023-11-03 19:49:50 24 4
gpt4 key购买 nike

我想创建一个通用类 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/

24 4 0
文章推荐: c# - 如何使用变量完成指令?
文章推荐: html - 如何使
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com