gpt4 book ai didi

c# - 泛型类 equals 方法限制输入参数和对象具有相同类型 T

转载 作者:行者123 更新时间:2023-11-30 22:28:53 29 4
gpt4 key购买 nike

以下 [c#] 代码将不会编译并出现错误“operator == cannot be applied to operands of type 'T' and 'T'”。

public class Widget<T> where T: IComparable
{
public T value;
public Widget(T input) { value = input; }
public bool Equals<T>(Widget<T> w) where T : System.IComparable
{
return (w.value == value);
}
}

有没有办法限制 w 输入参数的类型 T 与被比较对象的类型 T 相同,从而保证它们可以相互比较并消除编译器错误?如下所示在值前面使用 (dynamic) 允许它编译,但似乎有更好的方法可以在编译时捕获问题:

public bool Equals<T>(Widget<T> w) where T : System.IComparable
{
return (w.value == (dynamic) value);
}

最佳答案

假设您真的对这里的值相等感兴趣,您可以只使用 EqualityComparer.Default :

EqualityComparer<T> comparer = EqualityComparer<T>.Default;
return comparer.Equals(w.value, value);

请注意,目前您的 Equals 方法也是通用的,试图声明另一个 类型参数 T。我认为您真的不想那样做。

关于c# - 泛型类 equals 方法限制输入参数和对象具有相同类型 T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10540854/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com