我已经将泛型类型定义如下:
public class RelevanceGroup<T>
{
public string Name;
public List<Relevance<T>> Relevances { get; set; } = new List<Relevance<T>> { };
public RelevanceGroup(string name)
{
this.Name = name;
}
public RelevanceGroup(List<Relevance<T>> relevances, string name)
{
this.Name = name;
this.Relevances = relevances;
}
public bool ChangesHasBeenMade(List<Relevance<T>> newRelevances)
{
return !(newRelevances.All(o => this.Relevances.Any(w => w.ItemId == o.ItemId)) && (this.Relevances.All(o => newRelevances.Any(w => w.ItemId == o.ItemId))));
}
我的问题是关于最后一种方法:
我在我的linq表达式中收到一条编译错误消息,说“operator ==不能应用于T和T类型的操作数”。我必须做一个foreach循环才能使它工作。我能做些什么来使方法与linq表达式一起使用吗?
提前致谢。
答案 0 :(得分:0)
如果T
始终是引用类型,则可以为其添加约束,并且可以与==
进行比较。
public class RelevanceGroup<T> where T:class
答案 1 :(得分:0)
在方法内部,编译器不会(也不能)知道T是否是具有默认==运算符的类型,或者它是否过载。 您可以使用Equals()方法而不是==,如下所示:
return !(newRelevances.All(o => this.Relevances.Any(w => w.ItemId.Equals( o.ItemId))) && (this.Relevances.All(o => newRelevances.Any(w => w.ItemId.Equals( o.ItemId)))));