加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 通用对象的通用列表

发布时间:2020-12-15 06:36:56 所属栏目:百科 来源:网络整理
导读:假设我有一个表示数据字段的对象,该对象需要以下属性:名称,类型,值,长度.这是对象: class FieldT{ public string Name { get; set; } public Type Type { get { return typeof(T); } } public int Length { get; set; } public T Value { get; set; }} 我
假设我有一个表示数据字段的对象,该对象需要以下属性:名称,类型,值,长度.这是对象:
class Field<T>
{
    public string Name { get; set; }
    public Type Type
    {
        get
        {
            return typeof(T);
        }
    }
    public int Length { get; set; }
    public T Value { get; set; }
}

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

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

List<Field<object>> lst = new List<Field<object>>();
lst.Add(new Field<string>());
lst.Add(new Field<int>());
lst.Add(new Field<SomeObjectFromMyApp>());

后来我将不得不在一个循环中自动查询这些对象及其属性,就像这样:

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

解决方法

是的,仿制药是一个不错的选择.实现类型安全性的关键(并且识别具有Type属性的类型)是在列表和Field< T>类之间添加抽象.

有场< T>实现接口IField.此界面不需要任何成员.

然后将您的列表声明为列表< IField>.

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

然后再读取这些值,就可以了

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读