通用方法适用于一个类但不适用于另一个类,具有相同的接口

时间:2017-12-14 13:31:38

标签: c# interface generic-method

我有两个班级

[DataContract]
public class HiveReference : IGUID
{
    [BsonId]
    [DataMember]
    public Guid GUID{ get; set; }
    ....
}
...

[DataContract]
public class HiveByteChunk : IGUID
{
    [DataMember]
    [BsonId]
    public Guid GUID { get; set; }
    ...
}

我的界面......

public interface IGUID
{
    Guid GUID {get;set;}
}

然后我有一个扩展方法......

public static void InsertIfNotExists<T>(this T member) where T: IGUID
{
    if (!(member).Exists())
    {
        member.Insert();
    }
}

public static void Insert(this object member) 
{
    DBHelper.Insert(member);
}

然后是我的实施代码......

HiveReference hf = new HiveReference();
hf.InsertIfNotExists();

HiveByteChunk chunk = new HiveByteChunk();
chunk.InsertIfNotExists();

最后一行中断,编译错误:

Error   CS0311
    The type 'HiveLibrary.HiveBytes.HiveByteChunk' cannot be used as type parameter 'T' in the generic type or method 'Extensions.InsertIfNotExists<T>(T)'.
    There is no implicit reference conversion from 'HiveLibrary.HiveBytes.HiveByteChunk' to 'HiveLibrary.IGUID'.

如果两个类都实现了接口,为什么第一个类能够调用扩展,而不是最后一个?我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:0)

问题是我在不同的命名空间中有一个重复的界面。一旦我删除了它,一切都按预期工作。