2013-08-31 22 views
-2

我必須做什麼方法才能使下面的方法適用於IEnumerable<Flight>而不是字符串?我想操縱我的IEnumerable<Flight>來源(在參數中),並用方法編寫條件,並且僅基於這些條件返回IEnumerable<Flight>。所以,如果這些條件不符合,我不會說IEnumerable<Flight>返回該項目的記錄。如何使用foreach中的條件返回IEnumerable而不是字符串?

public string FilterFlights(IEnumerable<Flight> flights) 
{ 
    string s = ""; 
    foreach (var flight in flights) 
    { 
     var indexItem = 0; 
     DateTime previousArrivalDateTime = new DateTime(); 
     TimeSpan timeSpan; 

     int time = 0; 
     foreach (var segments in flight.Segments) 
     { 
      if (indexItem == 0) 
      { 
       previousArrivalDateTime = segments.ArrivalDate; 
       s = s + "Departure: " + segments.DepartureDate + ", Arrival: " + segments.ArrivalDate + "; "; 
      } 

      if (indexItem > 0) 
      { 
       timeSpan = segments.DepartureDate - previousArrivalDateTime; 
       time += timeSpan.Hours; 
       s = s + "Departure: " + segments.DepartureDate + ", Arrival: " + segments.ArrivalDate + "; "; 
       previousArrivalDateTime = segments.ArrivalDate; 
      } 
      indexItem++; 
     } 

     if (time > 2) 
      Console.WriteLine(s); 
    } 

    return s; 
} 

類:

public class Flight 
{ 
    public IList<Segment> Segments { get; set; } 
} 

public class Segment 
{ 
    public DateTime DepartureDate { get; set; } 
    public DateTime ArrivalDate { get; set; } 
} 

謝謝!

+0

什麼條件? – OneFineDay

+0

並返回什麼? 'IEnumerable '? – I4V

+0

修正了它,對不起:( –

回答

1

您應該退回IEnumerable<T>並致電yield return T;

E.g.

public IEnumerable<string> FilterFlights(IEnumerable<Flight> flights) 
{ 
    foreach (var flight in flights) 
    { 
     var indexItem = 0; 
     DateTime previousArrivalDateTime = new DateTime(); 
     TimeSpan timeSpan; 

     int time = 0; 
     foreach (var segments in flight.Segments) 
     { 
      if (indexItem == 0) 
      { 
       previousArrivalDateTime = segments.ArrivalDate; 
       yield return "Departure: " + segments.DepartureDate + ", Arrival: " + segments.ArrivalDate + "; "; 
      } 

      if (indexItem > 0) 
      { 
       timeSpan = segments.DepartureDate - previousArrivalDateTime; 
       time += timeSpan.Hours; 
       yield return "Departure: " + segments.DepartureDate + ", Arrival: " + segments.ArrivalDate + "; "; 
       previousArrivalDateTime = segments.ArrivalDate; 
      } 
      indexItem++; 
     } 
    } 

} 

這種方式,您可以使用它像這樣:

我希望這是你想要的。

foreach(string text in FilterFlights(flights)) 
    Console.WriteLine(text); 
+0

我修好了,我想返回'IEnumerable '。 –

+0

我剛剛向你展示瞭如何返回一個IEnumerable ,你所要做的就是糾正代碼以滿足你的需求,它應該是相當容易的。 – Casperah

+0

謝謝我明白了,我使用你的幫助使事情順利進行。我需要這樣(直接複製我的方法)http://pastebin.com/qCFZCYeC –

相關問題