Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.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# 计算块中的断点_C# - Fatal编程技术网

C# 计算块中的断点

C# 计算块中的断点,c#,C#,谁能帮我计算一下发生的街区之间的距离。 这是我的课程,在我的列表中,我从区块中获得开始和结束时间: private class Block { public DateTime Start { get; set; } public DateTime End { get; set; } } 列表中的时间是这样的 List<Block> blocks = new List<Block>(); 现在我需要到达和离开时间,也就是开始和停止之间的阻塞时间

谁能帮我计算一下发生的街区之间的距离。 这是我的课程,在我的列表中,我从区块中获得开始和结束时间:

private class Block
{
  public DateTime Start { get; set; }
  public DateTime End { get; set; }
}        
列表中的时间是这样的

 List<Block> blocks = new List<Block>();
现在我需要到达和离开时间,也就是开始和停止之间的阻塞时间,来计算它们的总和

public class Presence
{
  public DateTime arrival   { get; set; }
  public DateTime departure { get; set; }
}

List<Presence> presence = new List<Presence>();

time received in the presence list:
arrival                     departure 
1899-12-30 08:03:00.000;    1899-12-30 09:21:00.000
1899-12-30 09:36:00.000;    1899-12-30 10:34:00.000
1899-12-30 10:45:00.000;    1899-12-30 12:05:00.000
1899-12-30 13:03:00.000;    1899-12-30 14:24:00.000
1899-12-30 14:34:00.000;    1899-12-30 16:14:00.000
1899-12-30 16:27:00.000;    1899-12-30 18:02:00.000


对于我来说,有必要获取从开始到结束的时间段内的金额(出发-到达)

由于我对问题理解错误,这里有一个更新:

使用系统;
使用System.Collections.Generic;
名称空间控制台EAPP1
{
班级计划
{
静态void Main(字符串[]参数)
{
var blocks=新列表
{
新区块
{
结束=新的日期时间(1899,12,30,11,45,0),开始=新的日期时间(1899,12,30,8,30,0)
},
新区块
{
结束=新的日期时间(1899,12,30,17,0,0),开始=新的日期时间(1899,12,30,13,15,0)
}
};
var presences=新列表
{
新存在
{
到达=新的日期时间(1899,12,30,8,3,0),
出发=新的日期时间(1899、12、30、9、21、0)
},
新存在
{
到达=新的日期时间(1899,12,30,9,36,0),
出发=新的日期时间(1899、12、30、10、34、0)
},
新存在
{
到达=新的日期时间(1899,12,30,10,45,0),
出发=新的日期时间(1899、12、30、12、5、0)
},
新存在
{
到达=新的日期时间(1899,12,30,13,3,0),
出发=新的日期时间(1899、12、30、14、24、0)
},
新存在
{
到达=新的日期时间(1899,12,30,14,34,0),
出发=新的日期时间(1899、12、30、16、14、0)
},
新存在
{
到达=新的日期时间(1899,12,30,16,27,0),
出发=新的日期时间(1899、12、30、18、2、0)
}
};
//分组出席
var group=newdictionary();
foreach(块中的var块)
{
添加(块,新列表());
foreach(存在中的var存在)
{

如果(presence.disease>=block.Start&&presence.Arrival保存上一个presence对象,请使用两层循环, 你可以更简洁地解决这个问题

            Presence pre = null;
            int sum = 0;
            foreach(var cur in presences)
            {
                if(pre != null)
                {
                    foreach(var b in blocks)
                    {
                        if(pre.departure >= b.Start && b.End >=cur.arrival)
                        {
                            sum += (cur.arrival - pre.departure).Minutes;
                            break;
                        }
                    }
                }
                pre = cur;
            }

            Console.WriteLine(sum);//49

您可以使用IEnumerable使其更通用。@多米尼克谢谢您的帮助,我有点困惑,我想要TotalTime的总和,即(到达-离开)在那些介于开始和停止之间的问题中,我看不到出现的列表在哪里?那么我误解了你的问题。也许我们可以编辑你的问题并保留更多simple@DominicJonas是的,我们不同意,看看我的linq SumofBreakoffBlocks,我正试图计算出发到达时间,现在我希望它在blocks之间,我的代码是这样的esn不起作用,但在我的整个问题中,归结到计算(出发-到达)),这是区块链(开始和停止)之间的@DominicMonas你还能给我写一个时间跨度总计吗?非常感谢你的时间和努力。对于区块[0]:你想要时间跨度仅为9:36到10:34的
timespan
(哪个完全在
区块的时间范围内
)或者对于所有3个区块,其中也只有
出发
到达
在范围内?@Dominicjons我需要所有出发的时间跨度-在区块之间的到达,即:08:30->[09:36:00.000-09:21:00]+[10:45:00-10:34:00]<-11:45,第二个街区也是。
  double sumOfBreakOfBlocks = presence.Where(x => blocks.Any(b =>( x.arrival > b.Start && x.arrival > b.End) && x.arrival > x.departure)
                                           && blocks.Any(b => (x.departure < b.End && x.departure > b.Start) && x.departure < x.arrival)).Sum
                                           (x => (x.arrival.TimeOfDay - x.departure.TimeOfDay).TotalHours);
1899-12-30 09:36:00.000 - 1899-12-30 09:21:00.000; (15)
1899-12-30 10:45:00.000 - 1899-12-30 10:34:00.000; (11)
1899-12-30 14:34:00.000 - 1899-12-30 14:24:00.000; (10) 
1899-12-30 16:27:00.000 - 1899-12-30 16:14:00.000; (13)
            Presence pre = null;
            int sum = 0;
            foreach(var cur in presences)
            {
                if(pre != null)
                {
                    foreach(var b in blocks)
                    {
                        if(pre.departure >= b.Start && b.End >=cur.arrival)
                        {
                            sum += (cur.arrival - pre.departure).Minutes;
                            break;
                        }
                    }
                }
                pre = cur;
            }

            Console.WriteLine(sum);//49