私は、任意のデータ型を保持するジェネリック List のシリアル化のためのアプリケーションを作成しています。
public abstract class GenericObject<T> {
public string key;
public T value;
public GenericObject() { }
public GenericObject(string key, T value) : this() {
this.key = key;
this.value = value;
}
}
さらに、次のようにキーと値のペアを書き込むために -Interface をGenericList
実装するクラスがあります。IXmlSerializable
GenericObject<int> myInt = new GenericObject<int>("key", 3);
次の XML が生成されます。
<key>3</key>
のクラス定義は、GenericList
多かれ少なかれ次のとおりです。
public class GenericList<T> : IXmlSerializable {
List<T> objects;
// ...
}
では、 (どのように見えても)Person
から派生するクラスがあり、リストを 2 人の人物で埋めたいとします。GenericObject<string>
私が抱えている問題は、クラスのジェネリック型 T に制約を定義して、GenericList
から派生した型のみが可能になるようにすることですGenericObject
。を使用して既に試しましたpublic class GenericList<T> : IXmlSerializable where T : GenericObject<object>
が、次のコンパイラ エラーのために機能しませんでした。
Person' cannot be used as type parameter 'T' in the generic type or method 'GenericList<T>'. There is no implicit reference conversion from 'Person' to 'GenericObject<object>'
where句を空のままにしてみましたが、キーと値を取得するために の型をチェックする必要がT
ありGenericList
、次のようにも失敗しました。
if (typeof(T).IsAssignableFrom(typeof(GenericObject<object>)))
T
タイプ Person であり not であるため、常に false を返しますGenericObject<object>
。
私のリストを人で埋める方法を誰か提案してもらえますか?