泛型还是基于对象的?
问题描述:
我必须在基于对象和泛型之间做出决定。泛型还是基于对象的?
我有一个数据结构,并且它可以是整型,字符串或布尔。后来我需要一个项目列表,我不确定是否应该使物品通用或保持物品中的值作为对象。
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;
}
有没有人对我有任何建议?
编辑:对不起,我忘了一个事实:我需要决定在运行时类型。我得到一个字符串输入,我必须确定类型!
答
如果你打算使用Reflection
或DataBinding
(在这里您可以希望有元素的泛型集合,它更可能),在很大程度上作用于该数据结构,我会亲自避免使用泛型,当你使用它们时,故事变得更加困难。
在所有其他情况下,最好使用泛型。
因此,考虑我通过阅读你的问题的信息,我会说:使用泛型。
答
如果你使用了“基于对象”的方法,你需要每次投你的项目。如果你使用泛型,你不这样做,这是首先使用泛型的主要原因。
但是,我不知道你有什么问题,同时与仿制药获得的类型,当它真的很容易。
请看看这个链接,应该为您解决: How to get the type of T from a member of a generic class or method?
无论如何,你必须决定,到底什么是你的目标,其做法将是您更方便,更有效。我建议试试两种,思考各种情况,并选择最适合自己的东西。
求你了,不要用开关这样的...
如果你打算做通用_type_一个'之开关,你还不如不使用泛型。 – Oded 2012-04-02 08:55:20
'type'从哪里来? – svick 2012-04-02 09:05:06
你想它可以包含项目'' **和**列表项''还是会你只有“纯”只列出含有一种类型的项目(即仅'项目'S)的? –
ChrisWue
2012-04-02 09:05:35