泛型类参数对Method无效?

时间:2017-09-10 16:48:29

标签: c# linq generics

我已经将泛型类型定义如下:

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表达式一起使用吗?

提前致谢。

2 个答案:

答案 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)))));