0
と私はその後、私は拡張メソッドを持つ2つのクラスジェネリック一つのクラスのために働く方法が、他ではない、同じインターフェース
[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);
}
その後、私の実装コード...
このコンパイラエラーと0HiveReference 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'.
両方のクラスがインタフェースを実装している場合、なぜ最初のものは、拡張子を呼び出すことができますが、最後のではないでしょうか?私は明白な何かを欠いていますか
これは実際には不可能です。あなたは確かにあなたの記事にも欠けているものを逃した。 [mcve](問題を再現するために最小限の完全なコードを投稿する)を生成できますか? –
両方のクラスが 'HiveLibrary.IGUID'を実装していますか? –
[DataMember] [BsonId]の順番が違います...両方の上に[DataContract]がありますか? (あなたが...他のものよりも上にある、わかりません) –