【问题标题】:Class with generic type and generic list具有泛型类型和泛型列表的类
【发布时间】:2020-09-19 15:21:31
【问题描述】:

我想在其中一个属性中列出具有“通用”类型的自定义对象。

public class Tag
{
    public string Name { get; set; }
    public int id { get; set; }

    public ??? value {get;set;}

}

“值”可以是 int、double、string 或 bool。

如何制作自定义标签类的“通用”列表?

public list<Tag> t;

我看过“通用”集合和类,但问题是,如果我做了

class Tag<T>{}

我做不到:

List<Tag<T>> list = new List<Tag<T>>();
list.add(new Tag<int>());
list.add(new Tag<double>());

我已经尝试过使用接口、基类...我不知道在哪里看

一些想法?帮忙?

非常感谢。

【问题讨论】:

  • 问题是关于什么语言的? TIA。
  • 哦,对不起,它是 C#
  • 抱歉,这是 C#“ — FTFY :)
  • 为什么将不同类型的对象放在同一个列表中?您希望如何准确地使用它们?

标签: c# class generics base derived


【解决方案1】:

一种常见的方法是创建一个接口或基类。

public interface ITag
{
    string Name { get; set; }
    int Id { get; set; }

    object Value { get; }
    Type ValueType { get; }
}

那么Tag可以是泛型的:

public class Tag<T> : ITag
{
    public string Name { get; set; }
    public int Id { get; set; }

    public T Value { get; set; }

    object ITag.Value => this.Value;
    Type ITag.ValueType => typeof(T);
}

现在你可以这样做了:

List<ITag> list = new List<ITag>();
list.Add(new Tag<int>());
list.Add(new Tag<double>());

问题仍然是为什么?

【讨论】:

  • 您好,感谢您的所有回答。我需要这个,因为我的应用程序连接到一个 PLC(一个外​​部设备),这个 PLC 有不同的数据类型,ushort、int、bool、double……我只想要 1 个这些元素的列表。我已经尝试过你提出的解决方案,问题是当我得到一个元素时,我需要做一些演员,我不想要这个。我想也许我需要找到另一种设计来解决这个问题。
  • @Sined - 没有强制转换就无法解决这个问题。也许您可以解释一下您需要做什么,我们可以提供帮助?
  • 嗨,我想要的是不声明 500 个对象(TagInt tag1 = new....,TagDouble tag2 = new....)我想创建一个 Tag 对象列表并制作一些获取特定标签的方法。
  • @Sined - 这很好。 LINQ 可以轻松做到这一点。有什么问题?
  • 我想要一个泛型类“Tag”,我想要在其中拥有一个属性,其中包含我从 PLC 读取的数据类型(bool、int、double ...)这个部分很简单,我有它,然后我想要一个标签列表。我希望它访问列表并获取和设置此列表的值。问题?我可以创建一个通用类,但我不能创建“List> mylist....”,如果我输入类型 T,例如:int,所有对象都应该是 int,所以我可以添加到列表中这不是我想要的,我只想有一个列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多