-2

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

ありがとうございました!

4

1 に答える 1

1

a を返して;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);
于 2013-08-31T21:20:39.380 に答える