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类没有该属性。但是我想这样做,所以列表可以有一堆通用项目。
目前我正在将所有类型转换为字符串或字节数组。有没有办法创建一个返回特定类型的通用项目列表?
答案 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