Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在foreach中返回IEnumerable而不是带有条件的字符串?_C#_Linq - Fatal编程技术网

C# 如何在foreach中返回IEnumerable而不是带有条件的字符串?

C# 如何在foreach中返回IEnumerable而不是带有条件的字符串?,c#,linq,C#,Linq,我必须采用什么方法,才能使下面的方法代替字符串来处理IEnumerable?我想使用方法中写入的条件操作我的IEnumerable源代码(在参数中),并仅基于这些条件返回IEnumerable。因此,如果不满足这些条件,我不认为IEnumerable会返回该项的记录 public string FilterFlights(IEnumerable<Flight> flights) { string s = ""; foreach (var flight in fligh

我必须采用什么方法,才能使下面的方法代替字符串来处理
IEnumerable
?我想使用方法中写入的条件操作我的
IEnumerable
源代码(在参数中),并仅基于这些条件返回
IEnumerable
。因此,如果不满足这些条件,我不认为
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;
}
公共字符串过滤器指示灯(IEnumerable航班)
{
字符串s=“”;
foreach(飞行中的var飞行)
{
var indexItem=0;
DateTime previousArrivalDateTime=新日期时间();
时间跨度时间跨度;
整数时间=0;
foreach(飞行中的var段。段)
{
如果(indexItem==0)
{
previousArrivalDateTime=segments.ArrivalDate;
s=s+“出发:+segments.De出发日期+”,到达:“+segments.ArrivalDate+”;”;
}
如果(indexItem>0)
{
timeSpan=segments.DepartureDate-previousArrivalDateTime;
时间+=时间跨度小时;
s=s+“出发:+segments.De出发日期+”,到达:“+segments.ArrivalDate+”;”;
previousArrivalDateTime=segments.ArrivalDate;
}
indexItem++;
}
如果(时间>2)
控制台。写入线(s);
}
返回s;
}
课程:

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

public class Segment
{
    public DateTime DepartureDate { get; set; }
    public DateTime ArrivalDate { get; set; }
}
公共舱航班
{
公共IList段{get;set;}
}
公共课部分
{
public DateTime DepartureDate{get;set;}
公共日期时间到达日期{get;set;}
}

谢谢大家!

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

例如


还什么
IEnumerable
?您的需求和您的代码似乎是关于非常不同的事情。我在第一个屏幕上看到一个不同的操作,但没有过滤。我修复了,我想返回
IEnumerable
。很抱歉,我以前没有写过。我刚刚向您演示了如何返回IEnumerable,您所要做的就是更正代码以满足您的需要,这应该相当容易。谢谢我的理解,我在您的帮助下使事情正常进行。我需要这样(直接复制我的方法)
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);