2017-02-22 1 views
0

Ich arbeite an einer Windows Forms-Anwendung, und ich habe ein Problem. In einer GetDataFromFile-Methode gebe ich 2 Collections zurück, aber auf buttton start wie bekomme ich sie und benutze sie wie gezeigt.Erhalten Sie beide zurückgegebenen Ergebnisse von einer Methode

Vielen Dank im Voraus und traurig, wenn meine Frage dumm ist, aber ich bin ein Neuling und es nicht verstehen kann

public Tuple<List<string>,List<string>> GetDataFromFile() 
{ 
    XDocument doc = XDocument.Load("NotificationTasks.xml"); 
    var dates = doc.Descendants("Date"); 
    var hours = doc.Descendants("Time"); 
    var hoursCollection = new List<string>(); 
    var dateCollection = new List<string>(); 

    foreach (var date in dates) 
    { 
     dateCollection.Add(date.Value); 
    } 

    foreach (var hour in hours) 
    { 
     hoursCollection.Add(hour.Value); 
    } 

    return Tuple.Create(hoursCollection,dateCollection); 
} 


    private void btnStart_Click(object sender, EventArgs e) 
    { 

//here I must use the two collections from GetDataFromFile() 

     foreach (var dates in hoursCollection) 
     { 
      if (dates == DateTime.Now.Date) 
      { 
       foreach (var hours in hoursCollection) 
       { 
        StartNotificating(new TimeSpan(hours)); 
       } 
      } 
     } 
    } 

Antwort

0

Sie aus einem Tupel Ihren Datentyp von der Methode verwenden kann, als auch zu empfangen.

Referenz: https://msdn.microsoft.com/en-us/library/system.tuple(v=vs.110).aspx

public Tuple<List<string>,List<string>> GetDataFromFile() 
{ 
    XDocument doc = XDocument.Load("NotificationTasks.xml"); 
    var dates = doc.Descendants("Date"); 
    var hours = doc.Descendants("Time"); 
    var hoursCollection = new List<string>(); 
    var dateCollection = new List<string>(); 

    foreach (var date in dates) 
    { 
     dateCollection.Add(date.Value); 
    } 

    foreach (var hour in hours) 
    { 
     hoursCollection.Add(hour.Value); 
    } 

    return Tuple.Create(hoursCollection,dateCollection); 
} 


    private void btnStart_Click(object sender, EventArgs e) 
    { 

     //here I must use the two collections from GetDataFromFile() 
     Tuple<List<String>,List<String>> t = GetDataFromFile(); 
     List<String> hoursCollection = t.Item1; 
     List<String> dateCollection = t.Item2; 

     foreach (var dates in hoursCollection) 
     { 
      if (dates == DateTime.Now.Date) 
      { 
       foreach (var hours in hoursCollection) 
       { 
        StartNotificating(new TimeSpan(hours)); 
       } 
      } 
     } 
    } 
2

Sie könnten Ihre eigene Klasse definieren die Daten zurückgeben:

Ändern Sie die Methode, die Sie die Daten erhalten verwenden:

public FileData GetDataFromFile() 
{ 
    // read file etc... 
    return new FileData(hoursCollection, datesCollection); 
} 

Ihre Handler ist dann:

private void btnStart_Click(object sender, EventArgs e) 
{ 
    FileData fileData = GetDataFromFile(); 
    var hoursCollection = fileData.Hours; 
    var dateCollection = fileData.Dates; 
} 

Die Verwendung einer Klasse mit Namen für die Eigenschaften verringert die Wahrscheinlichkeit, dass Sie Item1 und Item2 der Tuple verwechseln.

Verwandte Themen