【发布时间】:2022-01-15 14:54:38
【问题描述】:
public static IEnumerable<T> Method<T>(IEnumerable<T> iterable){
T previous = default(T);
foreach(T current in iterable){
if (!current.Equals(previous)){
previous = current;
yield return current;
}
}
}
我对这段代码没有任何疑问,但如果可以使用以下方法比较两个 T 类型的对象,那只是为什么:
if (!current.Equals(previous))
那为什么不能比较使用:
if (!current == previous)
!给你一个错误提示
运算符“!”不能应用于“T”类型的操作数
如果你删除它,你会得到:
运算符“==”不能应用于“T”和“T”类型的操作数
我放弃了代码挑战,因为它似乎在告诉我,您实际上无法将一个 T 与另一个进行比较。然后我发现你可以做到这一点,但只是使用不同的语法/使用特定的方法。
谁能告诉我为什么会这样?
【问题讨论】:
-
您在寻找什么样的“为什么”?这就是语言的设计方式?您会对语言规范中的引用感到满意吗?另见:meta.stackoverflow.com/questions/293815/…
-
我对下面的答案很满意。在这个阶段,我只是在学习语言的所有部分是如何组合在一起的,所以我的“为什么”问题可能很容易回答。
-
在这种情况下,您应该考虑通过单击该复选标记来接受答案:)
标签: c# generics ienumerable equality-operator