2016-07-21 5 views
-2

Wenn ich versuche, den folgenden Code ausführen, bekomme ich eine Fehlermeldung, die besagt, "Typ void nicht implizit in" Program.trainDataResult "konvertieren kann. Ich bin nur Ich versuche, mein trainDataResult-Objekt aus der async-Methode zurückzugeben, damit ich es mit anderen Methoden in meiner App verwenden kann. Irgendwelche Vorschläge? Ich bin verwirrt, warum die async-Methode void zurückgibt, wenn ich angegeben habe, dass es das eingepackte trainDataResult-Objekt zurückgeben soll eine Aufgabe"Kann Typ void nicht implizit konvertieren" Dieser Fehler wird von async-Methode

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Net.Http; 
using System.Net.Http.Headers; 
using System.Xml.Serialization; 
using System.Xml; 
using System.IO; 

namespace ctaapijim 
{ 
    public class Program 
    { 
     [XmlRoot(ElementName = "ctatt", DataType = "string", IsNullable = true)] 
     public class trainDataResult 
     { 
      [XmlElement(ElementName = "tmst")] 
      public string timeStamp { get; set; } 

      [XmlElement(ElementName = "errCd")] 
      public byte errorCode { get; set; } 

      [XmlElement(ElementName = "errNm")] 
      public string errorName { get; set; } 

      [XmlElement(ElementName = "eta")] 
      public trainData eta { get; set; } 
     } 

     [Serializable()] 
     public class trainData 
     { 
      [XmlElement(ElementName = "staId")] 
      public ushort stationId { get; set; } 

      [XmlElement(ElementName = "stpId")] 
      public ushort stopId { get; set; } 

      [XmlElement(ElementName = "staNm")] 
      public string stationName { get; set; } 

      [XmlElement(ElementName = "stpDe")] 
      public string stopDesc { get; set; } 

      [XmlElement(ElementName = "rn")] 
      public ushort runNum { get; set; } 

      [XmlElement(ElementName = "rt")] 
      public string routeName { get; set; } 

      [XmlElement(ElementName = "destSt")] 
      public ushort destStation { get; set; } 

      [XmlElement(ElementName = "destNm")] 
      public string destName { get; set; } 

      [XmlElement(ElementName = "trDr")] 
      public byte trainDir { get; set; } 

      [XmlElement(ElementName = "prdt")] 
      public string prdTime { get; set; } 

      [XmlElement(ElementName = "arrT")] 
      public string arrTime { get; set; } 

      [XmlElement(ElementName = "isApp")] 
      public ushort isApp { get; set; } 

      [XmlElement(ElementName = "isSch")] 
      public ushort isSch { get; set; } 

      [XmlElement(ElementName = "isDly")] 
      public ushort isDly { get; set; } 

      [XmlElement(ElementName = "isFlt")] 
      public ushort isFlt { get; set; } 

      [XmlElement(ElementName = "flags")] 
      public string flags { get; set; } 

      [XmlElement(ElementName = "lat")] 
      public double lat { get; set; } 

      [XmlElement(ElementName = "lon")] 
      public double lon { get; set; } 

      [XmlElement(ElementName = "heading")] 
      public ushort heading { get; set; } 
     } 

     private const string URL = "http://lapi.transitchicago.com/api/1.0/ttarrivals.aspx?key=d94463bf32094ac6bb1417cd8f850a23&mapid=41300&max=1"; 

     static void Main(string[] args) 
     { 
      trainDataResult td = RunAsync().Wait(); 
     } 
     static async Task<trainDataResult> RunAsync() 
     { 
      using (var client = new HttpClient()) 
      {         
       var response = await client.GetAsync(URL); 
       if (response.IsSuccessStatusCode) 
       { 
        //get data from CTA API 
        var xml = await response.Content.ReadAsStringAsync(); 
        var ds = new XmlSerializer(typeof(trainDataResult), new XmlRootAttribute("ctatt")); 
        using (StringReader sr = new StringReader(xml)) 
        { 
         using (XmlReader xr = XmlReader.Create(sr)) 
         { 
          var trainDataResult = (trainDataResult)ds.Deserialize(xr); 

          return trainDataResult; 
          //calculate the difference in time between arrival time and current time 
          /* trainDataResult.eta.arrTime = trainDataResult.eta.arrTime.Substring(9); 
          TimeSpan trainTime = TimeSpan.Parse(trainDataResult.eta.arrTime); 
          var timeOfDay = DateTime.Now.TimeOfDay; 
          TimeSpan arrMins = (trainTime - timeOfDay); 

          Console.WriteLine("Station Name: {0}\nRoute Name: {1}\nArrival Time: {2}\nRun Number: {3}\nDirection: {4}", trainDataResult.eta.stationName, trainDataResult.eta.routeName, arrMins, trainDataResult.eta.runNum, trainDataResult.eta.stopDesc); 
          */            
         } 
        } 
       } 
       else 
       { 
        Console.WriteLine("There was an error!"); 
       } 
      } 
     } 
    } 
} 
+0

Mögliches Duplikat von [async/await - wann eine Aufgabe vo void zurückgegeben wird?] (Http://stackoverflow.com/questions/12144077/async-wait-when-to-return-a-task-vs-void) –

+1

Bitte zeigen Sie, in welcher Zeile Sie den Fehler erhalten, zeigen Sie auch den Rest Ihrer Funktion. –

+1

Bitte geben Sie [MCVE] an. Ich kann nicht verstehen, was los ist –

Antwort

0

Sie können eine lokale Variable mit dem gleichen Namen wie seine Art haben;.. der lokale Variable wird „verstecken“, der Name des Typs

Ändern Sie den Namen Ihrer Klasse von trainDataResult in TrainDataResult, und der Fehler sollte aufräumen.

Verwandte Themen