2016-02-02 4 views
-1

Ответ Дэвида сделал трюк!vb.net console app merge неизвестное количество файлов XML, проблемы с добавлением в коллекцию-SOLVED

Я пытаюсь создать приложение, которое позволяет пользователю перетаскивать файлы в консоль. Консоль подает пути через посредник в коллекцию XmlTextReader с, которые, в свою очередь, заполняют коллекцию DataSet в цикле for на основе коллекции XmlReader.count и, наконец, объединяют все это. Ну все хорошо и денди, пока я не пытаюсь .add в XmlTextReader списке, то он бросает NullReferenceException в виде error report from vbstudio

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

Imports System.Xml 
Module Module1 

    Sub Main() 
     Dim input As String 
     Dim nl As String = Environment.NewLine 
     Dim xml_files As List(Of XmlTextReader) 
     Dim xml_ds As List(Of DataSet) 
     Dim ds_sum As DataSet 

     Do While input <> "merge" 
      Console.WriteLine("--- drag & drop file to be merged---" + nl) 
      input = Console.ReadLine() 
      If input <> "merge" Then 
       Dim xml__ As New XmlTextReader(input) 
       xml_files.Add(xml__) ' this is th plce that throws the exception 
       'xml_files.Add(New XmlTextReader(input)) something i tried 
       Console.WriteLine(nl & "--- drag & drop new file or order merge ---" & nl) 
      ElseIf input = "merge" Then 
       ' ▼ ▼ ▼ ▼ read datasets to collection ▼ ▼ ▼ ▼ 
       For i = 0 To xml_files.Count - 1 
        Dim ds As New DataSet ' mediator 
        ds.ReadXml(xml_files(i)) ' read one-by-one xml 
        xml_ds.Add(ds) 'i ubacuje u kolekciju xml_ds 
       Next 
      End If 
     Loop 
     ' ▼ ▼ ▼ ▼ ovde sad ide XML MERGE ▼ ▼ ▼ ▼ 
     ds_sum = xml_ds(0) 

     For i = 1 To xml_ds.Count 
      ds_sum.Merge(xml_ds(i)) 
     Next 
     ' ▼ ▼ ▼ ▼ ispis xml-a ▼ ▼ ▼ ▼ 
     Console.WriteLine(nl & "--- direktorijum u koji zelis da sacuvas sabrani XML Prevuci u terminal ---" & nl) 
     input = Console.ReadLine() 
     ds_sum.WriteXml(input) 
    End Sub 
End Module 

`

+0

Возможный дубликат [Что такое исключение NullReferenceException и как его исправить?] (Http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix- it) – Blackwood

+0

Попробуйте изменить Dim xml_files As List (Of XmlTextReader) в Dim xml_files Как новый List (Of XmlTextReader) –

+0

Спасибо, это проделало трюк. –

ответ

0
Dim xml_files As List(Of XmlTextReader) 

объявляет только xml_files как объект, который может содержать объекты, которые являются списки XmlTextReaders. Он не инициализирует его. В обычном письме вы должны ввести

Dim xml_files As List(Of XmlTextReader) = New List(Of XmlTextReader) 

который декларирует объект и присваивает ему новый инициализированный список, но вы можете написать

Dim xml_files As New List(Of XmlTextReader) 

выполняющие точно то же самое.

+0

Спасибо за дополнительное объяснение, после внесения изменений в мой код все работает так, как я намеревался. –