Primo Chalice Ответов: 2

Как исправить следующую ошибку в C#?


Привет,

У меня есть следующий код:

foreach (var a in section)
            {
                XmlDocument SectionTotal = new XmlDocument();
                SectionTotal.LoadXml(a.OuterXML);


В упомянутом коде я получаю ошибку в OuterXML, заявив, что:

'object' does not contain a definition for 'OuterXML' and no extension method 'OuterXML' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)

Код C# в Visual Basic работает нормально:

For Each a In section
            Dim SectionTotal As New XmlDocument()
            SectionTotal.LoadXml(a.outerxml)


Пожалуйста помочь.

С уважением
Аман Чаурасия

Что я уже пробовал:

foreach (var a in section)
            {
                XmlDocument SectionTotal = new XmlDocument();
                SectionTotal.LoadXml(a.OuterXML);

GKP1992

Пробовали ли вы написать файл.outerxml, как он есть в коде VB, а не.OuterXML?

Primo Chalice

Да, дело не в этом. "outerxml" создает проблему.

2 Ответов

Рейтинг:
0

Jochen Arndt

Сообщение об ошибке совершенно ясно. Объект a не имеет определения для OuterXML.

Было бы неплохо узнать тип a соответственно section Затем документация для этого типа может быть проверена на наличие доступных методов и свойств, а также их синтаксиса.

Если это так то узел XmlNode.Свойство OuterXml (System.Xml)[^]:

SectionTotal.LoadXml(a.OuterXml);

[РЕДАКТИРОВАТЬ]
C# чувствителен к регистру, а VB .Net-нет.

Точнее: компилятор VB проверит, соответствует ли имя регистру без учета регистра, и затем выберет правильное регистрозависимое имя.

Так что ему все равно, если вы используете OuterXML или outerxml с VB, потому что компилятор решит, что OuterXml и используйте его внутренне. Но это не относится к C#, где вы должны использовать точное имя.
[/РЕДАКТИРОВАТЬ]


Primo Chalice

Я все еще не могу решить этот вопрос. Пожалуйста помочь.

foreach (var a в разделе)
{
XmlDocument SectionTotal = новый XmlDocument();
SectionTotal.LoadXml(a.OuterXml);

Это и есть код. Если я напишу, (SectionTotal.OuterXml), он соответствует, а затем показывает ошибку во время выполнения.

Когда я пишу (A.OuterXml), он показывает мне ошибку, упомянутую выше.

a-это объект, а section-XmlNodeList. Как мне действовать дальше?

Jochen Arndt

SectionTotal.OuterXml компилируется, потому что SectionTotal имеет тип XmlDocument, который также имеет свойство OuterXml. Ошибка времени выполнения возникает из-за наличия пустого XmlDocument в этом случае.

Я не знаю, почему он все еще терпит неудачу, когда "раздел" имеет тип XmlNodeList. Вы можете попробовать использовать "ручную" петлю:
for (int i = 0; i < section.Count; i++)
{
XmlDocument SectionTotal = new XmlDocument();
SectionTotal.LoadXml(section[i].OuterXml);
}


Просто для полноты картины:
У вас есть
using System.Xml;
заявление сверху вашего досье?

Primo Chalice

Да, у меня есть System.Xml-да.

Кроме того, когда я использовал ваш данный код, приложение перешло в режим перерыва.

Jochen Arndt

Что вы подразумеваете под "режимом перерыва"?

Он компилируется?
Тогда свойство может быть пустым или нулевым.

Рейтинг:
0

lmoelleb

Измените "var" на фактический тип, который вы ожидаете в коллекции разделов. По-видимому, тип раздела коллекции не позволяет компилятору вывести конкретный тип для использования помимо "объекта".


Primo Chalice

Собственно, это и есть мой вопрос. Он работал в Visual Basic как объект, так что же именно может быть проблемой в C#?

lmoelleb

Трудно сказать, так как вы не предоставляете типы, и, честно говоря, я не очень много знаю о том, как реагирует VB, поскольку я никогда не использовал его. Но, насколько я помню, существует общая разница в философии дизайна в C# и VB. C# - это "никогда не делайте ничего, что явно не входит в намерения разработчика". VB-это "если есть разумный вариант, который, вероятно, будет намерением разработчика, то сделайте это". Подход VB действительно хорош ... до тех пор, пока вы не потратите много времени на отслеживание того, когда он ошибся... тогда вы склоняетесь к ненависти к компьютерам, пытающимся быть умными. :)