说我有以下类型:
public class Field<T>
{
public string Name { get; set; }
public T Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如何声明包含此类字段数组的变量?我尝试了以下方法:
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) }
};
Run Code Online (Sandbox Code Playgroud)
但我得到以下编译时异常:
使用泛型类型"Field"需要1个类型参数
我也试过,var customFields = new Field<object>[]但我得到以下错误:
无法隐式将"Field"类型转换为"Field"
无法隐式将"Field"类型转换为"Field"
无法隐式将"Field"类型转换为"Field"
Gil*_*een 14
正如Matias所说,不能这样做,因为Field<int>并且Field<string>是完全不同的类型.你能做的是:
创建一个Field非通用的基础:
public class Field
{
public string Name { get; set; }
}
public class Field<T> : Field
{
public T Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后:
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) }
};
Run Code Online (Sandbox Code Playgroud)
正如马蒂亚斯评论的那样,需要一个向下倾斜才能获得Value不同类型.如果对于每种不同类型的Value特定逻辑要执行,处理它的一种好方法是使用Factory设计模式.工厂将返回每个Field正确的" FieldHandler<T>",它将向下,执行操作并返回所需的内容.
| 归档时间: |
|
| 查看次数: |
4159 次 |
| 最近记录: |