我正在编写一个用于序列化包含任何数据类型的通用列表的应用程序。所以我设计了一个基本数据类型来填充列表,如下所示:
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;
}
}
此外,还有一个类GenericList实现了IXmlSerializable-Interface 来编写键值对,如下所示:
GenericObject<int> myInt = new GenericObject<int>("key", 3);
这将产生以下 XML:
<key>3</key>
的类定义GenericList或多或少如下:
public class GenericList<T> : IXmlSerializable {
List<T> objects;
// ...
}
所以让我们假设我们有一个Person派生自GenericObject<string>(不管它看起来如何)的类,并且我们想用几个人来填充列表。我遇到的问题是在 -class 的泛型类型 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 子句留空,但随后我必须检查 in 的类型T才能GenericList获得它的键和值,其中我也失败了以下内容:
if (typeof(T).IsAssignableFrom(typeof(GenericObject<object>)))
这将始终返回 falseT类型 Person 而不是GenericObject<object>。
有人可以建议我如何用一个人填写我的名单吗?