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