【发布时间】:2016-10-21 23:40:51
【问题描述】:
假设我有以下类型:
public class Field<T>
{
public string Name { get; set; }
public T Value { get; set; }
}
如何声明一个包含此类字段数组的变量?我尝试了以下方法:
var customFields = new Field[]
{
new Field<string> { Name = "nickname", Value = "Bob" },
new Field<int> { Name = "age", Value = 42 },
new Field<DateTime> { Name = "customer_since", Value = new DateTime(2000, 12, 1) }
};
但我得到以下编译时异常:
使用泛型类型“字段”需要 1 个类型参数
我也尝试了var customFields = new Field<object>[],但出现以下错误:
无法将类型“Field”隐式转换为“Field”
无法将类型“Field”隐式转换为“Field”
无法将类型“Field”隐式转换为“Field”
【问题讨论】:
-
每个泛型类型,都是一个不同的类型。因此,您正在尝试创建一组不同类型的实例。这是不可能的。这就像尝试创建一个将存储
string和int值的数组。不过,你可以看看covariance。