2012-04-02 2 views
0

Я должен принять решение между объектными и дженериками.дженерики или объектные?

У меня есть структура данных, и это может быть int, string или bool. Позже мне нужен список элементов, и я не уверен, должен ли я делать Item generic или удерживать значение в элементе как объекте.

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

У кого-нибудь есть совет для меня?

EDIT: Извините, я забыл один факт: мне нужно решить тип во время выполнения. Я получаю строковый ввод, которым я должен идентифицировать тип!

+6

Если вы собираетесь сделать 'switch' на родовом _type_, вы могли бы также использовать дженерики. – Oded

+0

Откуда берется тип? – svick

+1

Вы хотите список, который может содержать 'Item ' ** и ** 'Item ' или у вас будут только «чистые» списки, содержащие только один тип элементов (т. Е. Только «Item »)? – ChrisWue

ответ

0

Если вы собираетесь использовать Reflection или DataBinding (где вы могут хотят иметь общий набор элементов, насколько это возможно), что в значительной степени работает на этой структуры данных, я бы лично избежать использования непатентованных лекарственных средств, потому что история становится сложнее, когда вы их используете.

Во всех остальных случаях лучше использовать дженерики.

Так что рассматривая информацию, которую я имею, читая ваш вопрос, я бы сказал: используйте дженерики.

0

Если вы используете подход, основанный на объекте, вам нужно будет бросать предметы каждый раз. Если вы используете дженерики, вы этого не делаете, и это основная причина использования дженериков в первую очередь.

Однако я не уверен, какие проблемы у вас возникают при получении типа с дженериками, когда это очень просто.

Пожалуйста, обратите внимание на эту ссылку, которая должна решить для вас: How to get the type of T from a member of a generic class or method?

Во всяком случае, вы должны решить, что именно ваша цель и какой подход будет более простым и эффективным для вас. Я бы предложил попробовать оба, подумать о различных ситуациях и выбрать то, что подходит вам лучше всего.

Пожалуйста, только не используйте переключатель, как ...

Смежные вопросы