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

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

4

1 回答 1

1

对于没有类型转换的解决方案,您应该查看这个问题的公认答案: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

于 2013-08-19T19:48:01.733 回答