我试图将泛型对象的列表存储在泛型列表中,但在声明它时遇到了困难。我的对象看起来像:
public class Field<T>
{
public string Name { get; set; }
public string Description { get; set; }
public T Value { get; set; }
/*
...
*/
}我想创建一个这样的列表。我的问题是,列表中的每个对象都可以有一个单独的类型,因此填充的列表可以包含以下内容:
{ Field<DateTime>, Field<int>, Field<double>, Field<DateTime> }那么我该如何声明呢?
List<Field<?>>(我希望尽可能保持类型安全,所以我不想使用ArrayList)。
发布于 2010-04-24 04:38:11
在这种情况下,拥有一个包含非泛型位的抽象基类(或接口)可能会对您有所帮助:
public abstract class Field
{
public string Name { get; set; }
public string Description { get; set; }
}
public class Field<T> : Field
{
public T Value { get; set; }
/*
...
*/
}然后你就可以拥有一个List<Field>了。它表达了你实际知道的关于列表的所有信息。您不知道字段值的类型,因为不同字段的值可能会有所不同。
发布于 2010-04-24 04:47:11
在编译时不知道泛型类型的情况下,不能声明泛型类型列表。
您可以声明List<Field<int>>或List<Field<double>>,但是除了object之外,对于Field<int>和Field<double>,没有其他通用的基类型。因此,唯一可以容纳不同类型字段的List<T>将是List<object>。
如果希望列表具有更具体的类型,则必须使Field<T>类继承一个类或实现一个接口。然后,您可以将其用于列表中的泛型类型。
发布于 2010-04-24 04:40:22
也许实现一个接口。
interface IField
{
}
class Field<T> : IField
{
}..。
List<IField> fields = new List<IField>() { new Field<int>(), new Field<double>() };https://stackoverflow.com/questions/2701830
复制相似问题