【发布时间】:2012-04-02 17:51:29
【问题描述】:
我必须在基于对象和泛型之间做出决定。
我有一个数据结构,它可以是 int、string 或 bool。稍后我需要一个项目列表,但我不确定是否应该将项目设为通用或将项目中的值作为对象。
public class Item<T>
{
private T value = default(T);
public Item(T value)
{
this.value = value;
}
public T Value
{
get { return this.value; }
set { this.value = value; }
}
}
或
public class Item
{
private Object value = null;
public Item(Object value)
{
this.value = value;
}
public Object Value
{
get { return this.value; }
set { this.value = value; }
}
}
实际上,我想使用泛型,但在获取变量的类型时遇到了问题。
Item<T> item;
switch(type) // type is a string
{
case "int":
item = new Item<Int32>;
break;
case "string":
item = new Item<String>;
break;
case "bool":
item = new Item<Boolean>;
break;
}
有人对我有什么建议吗?
编辑:对不起,我忘记了一个事实:我需要在运行时决定类型。我得到一个字符串输入,我必须通过它来识别类型!
【问题讨论】:
-
如果你打算在泛型 type 上做一个
switch,你最好不要使用泛型。 -
type来自哪里? -
您想要一个可以包含
Item<int>和Item<bool>的列表还是只有“纯”列表只包含一种类型的项目(即只有@987654328 @s)? -
我得到一个字符串,我必须确定它是数字、文本还是布尔值。纯列表就足够了,那么一种方法可能是我省略临时变量并直接将一个添加到相应的列表中。
-
你为什么要这样做?最好的解决方案在某种程度上取决于答案。你确定永远不会有超过 3 种可能的类型吗?您是否需要将这些项目视为一个单一的同质集合?你甚至需要
Item<T>课程吗? (也就是说,为什么不将字符串存储为字符串,将整数存储为整数,将布尔值存储为布尔值)?