2014-10-20 2 views
1

У меня есть пустой список с моделями типа 'audi_b9_aismura', которые я хочу заполнить объектом, который я получаю из другого списка.C# convert from object to model type

Я знаю, что этот объект имеет указанный тип (audi_b9_aismura), но я не могу добавить его в список, используя Convert.Changetype тоже не работает. Код ниже бросает (во время разработки) следующую ошибку: Невозможно преобразовать из «объекта» в «.audi_B9_aismura».

List<audi_b9_aismura> dataList = new List<audi_b9_aismura>(); 

if (obj.GetType().Equals(typeof(audi_b9_aismura))) 
        { 
         dataList.Add(Convert.ChangeType(obj, typeof(audi_b9_aismura))); 
        } 

Я также пробовал, что тоже не работает.

audi_b9_aismura testVar = Convert.ChangeType(obj, typeof(audi_b9_aismura)); 

И, что преобразует его в порядке, но при добавлении его снова говорится, что это объект типа.

var testVar = Convert.ChangeType(obj, typeof(audi_b9_aismura)); 
dataList.Add(testVar); 

Если я получить тип объекта, заполнив его в строку, он возвращает правильный тип (audi_b9_aismura)

string result = Convert.ChangeType(obj, typeof(audi_b9_aismura)).GetType().ToString(); 
+0

'Convert.ChangeType()' возвращает объект, вам все равно нужно отдать его правильному типу, так как кастинг - это ВСЕ, что вам нужно сделать в этом случае, 'Convert.ChangeType' не имеет никакой цели. –

+0

Если вы просто хотите бросать предметы из одного типа в другой, вы можете использовать операторы LINQ Cast <> или OfType <> –

+0

Мне кажется странным, что результат строки заполняется правильным типом. Я новичок в программировании на C#, поэтому, вероятно, я ошибаюсь, но если я извлечу тип из «объекта», и он настроен на тип (audi_b9_aismura), который я хочу, то почему он не настроен на тип, когда Я пытаюсь заполнить переменную этим? – DaGrooveNL

ответ

4

Почему бы не сделать простой бросок:

if (obj is audi_b9_aismura) 
{ 
    dataList.Add((audi_b9_aismura)obj); 
} 

As Бен Робинсон сказал в своем комментарии: Convert.ChangeType() возвращает object, который все еще должен быть отброшен до нужного типа.

+0

Ну, это работает! Благодаря! Тем не менее, я не понимаю, почему преобразование его в другой тип не работает, но это так. Кто-нибудь должен объяснить? – DaGrooveNL

+0

Имеет смысл, но стыдно, что, определяя настраиваемый тип для преобразования в, он действительно не преобразуется в пользовательский тип. Редактировать: О, вы удалили свой комментарий ... – DaGrooveNL

+0

Да, это не исходило из этого, но из того, что сказал Бен Робинсон в своем комментарии. –

1

Try:

List<audi_b9_aismura> dataList = new List<audi_b9_aismura>(); 

if (obj is audi_b9_aismura) 
{ 
    dataList.Add((audi_b9_aismura)obj); 
} 
1

LINQ предоставляет Cast<> и OfType<> методы, которые позволяют отливать или объект фильтра на speficic типа соответственно.

Чтобы получить элементы определенного типа в виде списка вы можете написать:

var dataList=sourceList.OfType<audi_b9_aismura>().ToList(); 

Если вы уверены, что источник содержит только предметы определенного типа, вы можете написать:

var dataList=sourceList.Cast<audi_b9_aismura>().ToList(); 
+0

Вы правы, конечно. +1 –