通用对象的通用列表

假设我有一个表示数据字段的对象,该对象需要以下属性:Name,Type,Value,Length。 这是对象:

class Field { public string Name { get; set; } public Type Type { get { return typeof(T); } } public int Length { get; set; } public T Value { get; set; } } 

我使用了generics,因为我想强制代码的用户只能分配某种类型的值。
现在的问题是我想创建一个字段列表。
如果我创建List<Field>类的List<Field>那么我们可以将任何Value分配给列表中的给定Field,当我们查询Type时,我们得到’object’。
事情是 – 在那个列表上我可能想要几个字段持有字符串,很少持有整数,日期,甚至自定义对象反过来将有一个字段列表…
generics是一个很好的解决方案吗? 如果是,我将如何实施呢? 如果没有,有什么更好的方法?

– -编辑 – –
只是为了增加一些背景:
1.我可能想要一个字段列表,每个字段将保存不同的数据类型,如下所示:

 List<Field> lst = new List<Field>(); lst.Add(new Field()); lst.Add(new Field()); lst.Add(new Field()); 

2.稍后我将不得不在循环中自动查询这些对象及其属性,类似于:

 foreach(Field fld in lst) { Type t = fld.Type; //do some other stuff } 

是的,仿制药是一个不错的选择。 实现类型安全的关键(并且使用Type属性标识Type是在列表和Field类之间添加抽象。

Field实现接口IField 。 此界面不需要任何成员。

然后将列表声明为List

这样,您可以将列表限制为仅包含字段,但每个字段可以是不同的类型。

然后,稍后再读取值

 foreach(var field in list) { var type = field.Type; .... } 

我建议你定义一个接口,Field实现那个接口

 public interface IField { } public class Field : IField { public string Name { get; set; } public Type Type { get { return typeof(T); } } public int Length { get; set; } public T Value { get; set; } } 

所以你可以写这段代码:

 var list = new List(); 

现在这个列表可以包含Field类型的任何对象