如何返回IEnumerable而不是foreach中有条件的字符串

本文关键字:foreach 有条件 字符串 何返回 返回 IEnumerable | 更新日期: 2023-09-27 18:29:43

我必须采取什么方法,才能使下面的方法适用于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; }
}

谢谢!

如何返回IEnumerable而不是foreach中有条件的字符串

您应该返回一个IEnumerable<T>并调用yield return T

例如

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);