【发布时间】:2013-10-15 09:49:35
【问题描述】:
我正在编写一个用于序列化包含任何数据类型的通用列表的应用程序。所以我设计了一个基本数据类型来填充列表,如下所示:
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;
// ...
}
假设我们有一个派生自GenericObject<string> 的类Person(不管它看起来如何),并且我们想用几个人来填充列表。我遇到的问题是在GenericList-class 的泛型类型 T 上定义一个约束,以便只有从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 子句留空,但随后我必须检查 GenericList 中的 T 的类型,以便获取它的键和值,其中我也失败了以下内容:
if (typeof(T).IsAssignableFrom(typeof(GenericObject<object>)))
因为T 的类型是Person 而不是GenericObject<object>,所以它总是返回false。
有人可以建议我如何用一个人填写我的列表吗?
【问题讨论】:
标签: c# generics xml-serialization