泛型还是基于对象的?

泛型还是基于对象的?

问题描述:

我必须在基于对象和泛型之间做出决定。泛型还是基于对象的?

我有一个数据结构,并且它可以是整型,字符串或布尔。后来我需要一个项目列表,我不确定是否应该使物品通用或保持物品中的值作为对象。

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; 
} 

有没有人对我有任何建议?

编辑:对不起,我忘了一个事实:我需要决定在运行时类型。我得到一个字符串输入,我必须确定类型!

+6

如果你打算做通用_type_一个'之开关,你还不如不使用泛型。 – Oded 2012-04-02 08:55:20

+0

'type'从哪里来? – svick 2012-04-02 09:05:06

+1

你想它可以包含项目'' **和**列表项''还是会你只有“纯”只列出含有一种类型的项目(即仅'项目'S)的? – ChrisWue 2012-04-02 09:05:35

如果你打算使用ReflectionDataBinding(在这里您可以希望有元素的泛型集合,它更可能),在很大程度上作用于该数据结构,我会亲自避免使用泛型,当你使用它们时,故事变得更加困难。

在所有其他情况下,最好使用泛型。

因此,考虑我通过阅读你的问题的信息,我会说:使用泛型。

如果你使用了“基于对象”的方法,你需要每次投你的项目。如果你使用泛型,你不这样做,这是首先使用泛型的主要原因。

但是,我不知道你有什么问题,同时与仿制药获得的类型,当它真的很容易。

请看看这个链接,应该为您解决: How to get the type of T from a member of a generic class or method?

无论如何,你必须决定,到底什么是你的目标,其做法将是您更方便,更有效。我建议试试两种,思考各种情况,并选择最适合自己的东西。

求你了,不要用开关这样的...