【发布时间】:2018-04-04 02:01:09
【问题描述】:
在下面的代码示例中,编译器抱怨x.Id == reference.Id:
运算符“==”不能应用于“TId”和“TId”类型的操作数
在 SO 上提出了类似的问题,通过将 ==-operator 替换为 IEquatable<> + Equals 或 EqualityComparer<TEnum>.Default 来解决这些问题。
但是,由于对这个问题不重要的原因,这两种解决方案都不适用于我。
我不是在寻找 == 运算符的替代品,而是在寻找一个解释为什么相等运算符不适用于泛型类型。
public class Object<TId>
{
public TId Id { get; set; }
// Some other object properties...
}
public class ObjectReference<TId>
{
public TId Id { get; set; }
}
public class ObjectStore<TId>
{
private List<Object<TId>> _store = new List<Object<TId>>();
public Object<TId> FindByReference(ObjectReference<TId> reference)
{
return _store.FirstOrDefault(x => x.Id == reference.Id);
}
}
【问题讨论】: