我需要采取什么方法,使下面的方法适用于IEnumerable<Flight>
而不是字符串?我想使用方法编写的条件操纵我的IEnumerable<Flight>
源(在参数中),并仅根据这些条件返回IEnumerable<Flight>
。因此,如果不满足这些条件,我不会认为IEnumerable<Flight>
返回该项目的记录。
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 :(得分: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);