Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Почему без каста не работает?

406  
Murr патриот13.03.19 12:07
Murr
13.03.19 12:07 

Почему без каста не работает?


Простой код:

XmlSchema xsdSchema = ...;
var items = xsdSchema.Items

.Cast<XmlSchemaObject>() // didn't work without this cast

.Where(item => item.GetType() == typeof(XmlSchemaAnnotation));

;

Items - коллекция XmlSchemaObject - вроде должно работать без дополнительного каста.


П.С. Обычного Селекта - тоже нет... просто нет. Вроде все либы референснуты...

#1 
AlexNek патриот13.03.19 13:58
AlexNek
NEW 13.03.19 13:58 
в ответ Murr 13.03.19 12:07

Возможно потому, что XmlSchemaObjectCollection наследуется от IEnumerable

а не от IEnumerable<XmlSchemaObject>

#2 
Murr патриот13.03.19 14:11
Murr
NEW 13.03.19 14:11 
в ответ AlexNek 13.03.19 13:58

Цикл перебора элементов по XmlSchemaObject вполне работает.

Хотя - возможно.

Но, блин, приходится вот такое изобретать:

XmlSchemaComplexType item = xsdSchema.Items
.Cast<XmlSchemaObject>()
.Where(x => x.GetType() == typeof(XmlSchemaComplexType))
.Cast<XmlSchemaComplexType>()
.FirstOrDefault();

#3 
AlexNek патриот13.03.19 15:03
AlexNek
NEW 13.03.19 15:03 
в ответ Murr 13.03.19 14:11

слишком много в одной строке. Можно и по другому записать

IEnumerable<XmlSchemaObject> items = from item in xsdSchema.Items.Cast<XmlSchemaObject>() where item.GetType() == typeof(XmlSchemaAnnotation) select item;
XmlSchemaObject schemaObject = items.FirstOrDefault();


#4 
Murr патриот13.03.19 15:13
Murr
NEW 13.03.19 15:13 
в ответ AlexNek 13.03.19 15:03

В одной строке - да, многовато... сразу даже не прочитаешь с непривычки. улыб

Мне "по-операционно" удобнее - лучше понимаю что вычисляется.


К тому же - результирующий тип у меня немного другой...

#5 
dymanoid местный житель13.03.19 22:17
dymanoid
NEW 13.03.19 22:17 
в ответ Murr 13.03.19 12:07

OfType<T> забанили, да?

#6 
Murr патриот13.03.19 23:47
Murr
NEW 13.03.19 23:47 
в ответ dymanoid 13.03.19 22:17

Не знал. Редко пользуюсь.

Завтра посмотрю как получится - если упростится - хорошо.

Спасибки.

#7 
Murr патриот13.03.19 23:49
Murr
NEW 13.03.19 23:49 
в ответ Murr 13.03.19 23:47

P.S. Вопрос был - Почему не работает без каста?

#8 
Murr патриот15.03.19 17:25
Murr
NEW 15.03.19 17:25 
в ответ Murr 13.03.19 23:49

Ок, упростилось.

Остальное, правда, запуталось...

#9