2016-11-04 1 views
-1

Das Problem mit dem anderen Fall ist, habe ich auf den ProblemlinienWas ist der Fehler bei der Eingabe der Zeichenkette, die zu Nullreferenzen führt?

kommentiert
static void Main(string[] args) 
    { 
     XMLData xmldataExample = new XMLData(); 
     Usergaz usergazExample = new Usergaz(); 
     UsergazItem usergazitemExample = new UsergazItem(); 

     UsergazItem item = new UsergazItem(); 
     string filename = @"C:\Users\565133\Desktop\test.xml"; 
     Deserialize<XMLData> deserializeobj = new Deserialize<XMLData>(); 
     Console.WriteLine("Choose \n1.Serialization\n2.Deserialization\n3.Deserialize only a token"); 

     //It works when I give tknid input line here 
     int inp = Console.Read(); 
     string tknid = Console.ReadLine();//It doesn't work if I get tknid input here 

     if (inp == 1) 
     { 
      usergazitemExample.getusergazitem(); 

      usergazExample.getusergaz(); 
      usergazExample.gazitem.Add(usergazitemExample); 

      xmldataExample.getxmldata(); 
      xmldataExample.gazset.Add(usergazExample); 


      serial(xmldataExample, filename); 
      Console.WriteLine("Its done"); 
      Console.ReadKey(); 

     } 
     else if (inp == 2) 
     { 
      Console.WriteLine("Getting data from xml file"); 

      // Deserialize<XMLData> deserializeobj = new Deserialize<XMLData>(); 
      xmldataExample = deserializeobj.deserializefunction(filename); 
      List<Usergaz> samplelist = new List<Usergaz>(); 
      samplelist = xmldataExample.gazset; 

      MTable.initialize(); 
      MTable.usergazzetterset.Add(xmldataExample.updatedtime, samplelist); 
      Console.WriteLine("Deserialization complete, check the object"); 
      Console.ReadKey(); 
     } 

In diesem Fall anders, ich bin Filterung mit tknid, aber noch bevor ich Eingang tknid vom Benutzer, ich Nullreference Ausnahme erhalten sagen, das 'Objekt' Objekt ist null. ich die Ausnahme von der Console.WriteLine Linie

wies
 else 
     { 
      //Console.WriteLine("Getting only a specific token Enter the token id"); 
      //string tknid; 
      //tknid = Console.ReadLine(); 
//I intended to give tknid input here, but I cannot do it... 
      //Console.WriteLine(tknid); 
      //Console.ReadKey(); 
      //string tknid = "3"; Initializing tknid with this statement works fine 




      item = deserializeobj.deserializefunction(filename).gazset[0].gazitem.Where(X => X.id == tknid).FirstOrDefault(); 

      Console.WriteLine("The value for the token id {0} is {1}", tknid,item.val); 

      Console.ReadKey(); 

     } 
    } 
+1

, welcher Teil der Ausnahme sind Sie nicht verstehen - Artikel ist null & Sie versuchen, die val-Feld in der Console.WriteLine-Anweisung angezeigt werden - so verursacht item.val die Ausnahme . – PaulF

+0

Wo ist tKnid definiert? Paul hat Recht, dass der Fehler darauf hinweist, dass die Elementvariable null ist, da tKnid nach der Eingabe von der Konsole empfangen wird.Readline ist eine Zeichenfolge. Setzen Sie einen Haltepunkt dort und sehen Sie, was die Werte sind. – JohnG

+0

Ich bin ziemlich sicher, dass der obige Code einen Kompilierzeitfehler verursachen wird 'Der Name 'tknid' existiert nicht im aktuellen Kontext 'in Zeile:' tknid = Console.ReadLine(); ' – JohnG

Antwort

0

ich die Lösung bekommen haben, war das Problem nicht mit if..else Aussage, es ist mit Console.Read().

Ich ersetzte int inp = Console.Read() durch int inp = int.Parse(Console.ReadLine()) und es funktioniert gut.

Jetzt verstehe ich, wie Console.Read() Arbeiten mit Hilfe einer Antwort, die ich unten geteilt habe, aber ich werde nie versuchen, Console.Read() zu verwenden, und immer Console.ReadLine() verwenden würde.

Wie Console.Read() Werke:

https://stackoverflow.com/a/10318917/7114583

Verwandte Themen