我有两个班级
[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'.
如果两个类都实现了接口,为什么第一个类能够调用扩展,而不是最后一个?我错过了一些明显的东西吗?
答案 0 :(得分:0)
问题是我在不同的命名空间中有一个重复的界面。一旦我删除了它,一切都按预期工作。