即使它实现了所需的接口,C#泛型方法也会拒绝某个类型

时间:2011-05-10 03:14:09

标签: c# generics interface type-conversion

希望我已经正确地描述了它。我有一个'通用方法',如下所示。它接受任何Icomparable / Iequatable类型的列表,并返回下面显示的包含匹配/不匹配项列表的“compareResult”类。

public partial class Comparers
{
    public class compareResult<T>
    {
        public List<T> unchangedItems;
        public List<T> changedItems;
        public List<T> leftOrphans;
        public List<T> rightOrphans;
    }

    public static compareResult<T> stepCompare<T>(List<T> leftList, List<T> rightList, bool confirmUniqueIDs = true) where T : IEquatable<T>, IComparable
    {
        ...

我现在尝试传入一个'LicencedCustomer'列表,该列表定义如下,并实现CompareTo和Equals方法来实现IComparable / IEquatable接口。

public class LicencedCustomer : IEquatable<LicencedCustomer>, IComparable<LicencedCustomer>
    {

        public string LMAA_CODE {get; set;}
    ...

现在我尝试传递以下两个客户列表:

Comparers.compareResult<LicencedCustomer> result = new Comparers.compareResult<LicencedCustomer>();

result = Comparers.stepCompare(leftList, rightList);

但它说“错误1”类型'MFTests.LicencedCustomer'不能在泛型类型或方法'MF.Comparers.stepCompare(System.Collections.Generic.List,System.Collections)中用作类型参数'T'。 Generic.List,bool)'。没有从'MFTests.LicencedCustomer'到'System.IComparable'的隐式引用转换......

我以为我已经实现了IComparable,虽然它指的是我不太懂的转换。对于长篇解释,我很抱歉,我尽量保持简短。

对我做错了什么的想法?

1 个答案:

答案 0 :(得分:5)

泛型方法不包含泛型类型标识符T

where T : IEquatable<T>, IComparable

应该是

where T : IEquatable<T>, IComparable<T>