是否可以创建返回特定数据类型的泛型列表

本文关键字:数据类型 泛型 列表 创建 返回 是否 | 更新日期: 2023-09-27 18:28:11

class a {
}
class b<T>:a {
 public T foo;
}

List<a> foo2 = new List<a>();
b<int> foo3 = new b<int>();
foo3.foo = 4;
foo2.add(foo3);

现在 foo2[0].foo 将不起作用,因为类 A 没有该属性。但是,我想这样做,以便列表可以包含一堆通用项目。

目前,我正在将所有类型转换为字符串或字节数组。有没有办法创建一个将返回特定类型的泛型项列表?

是否可以创建返回特定数据类型的泛型列表

对于没有类型强制转换的解决方案,您应该查看此问题的公认答案: C# 中的可区分并集

Juliet提出的Union3(或4或5或您需要多少种不同的类型(类型将允许您拥有一个仅接受所需类型的列表:

    var l = new List<Union3<string, DateTime, int>>  {
            new Union3<string, DateTime, int>(DateTime.Now),
            new Union3<string, DateTime, int>(42),
            new Union3<string, DateTime, int>("test"),
            new Union3<string, DateTime, int>("one more test")
    };
        foreach (Union3<string, DateTime, int> union in l)
        {
            string value = union.Match(
                str => str,
                dt => dt.ToString("yyyy-MM-dd"),
                i => i.ToString());
            Console.WriteLine("Matched union with value '{0}'", value);
        }

有关完整示例,请参见此处:http://ideone.com/WZqhIb