是否可以制作返回特定数据类型的泛型列表?

时间:2013-08-19 19:27:14

标签: c# inheritance

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类没有该属性。但是我想这样做,所以列表可以有一堆通用项目。

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

1 个答案:

答案 0 :(得分:1)

对于没有类型广播的解决方案,您应该看一下此问题的接受答案:Discriminated union in 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