我有以下课程:
public class Datum
{
public DateTime DateTime;
public double Value;
}
使用这些扩展方法:
public static double Sum(this IEnumerable<Datum> @this)
{
return @this.Sum(datum => datum.Value);
}
public static IEnumerable<Datum> InTimeRange(this IEnumerable<Datum> @this, DateTime start, DateTime end)
{
return from datum in @this
where (start <= datum.DateTime && datum.DateTime < end)
select datum;
}
public static IEnumerable<Datum> ForEach(this IEnumerable<Datum> @this, object businesshours)
{
var pob = businesshours.ToString();
switch(pob)
{
case "business":
return from datum in @this
where (datum.DateTime.DayOfWeek != DayOfWeek.Sunday & datum.DateTime.DayOfWeek != DayOfWeek.Saturday & datum.DateTime.Hour > 7 & datum.DateTime.Hour < 20)
select datum;
case "offhours":
return from datum in @this
where !(datum.DateTime.DayOfWeek != DayOfWeek.Sunday & datum.DateTime.DayOfWeek != DayOfWeek.Saturday & datum.DateTime.Hour > 7 & datum.DateTime.Hour < 20)
select datum;
default:
return from datum in @this
select datum;
}
}
public static IEnumerable<Datum> Addition(this IEnumerable<Datum> @this, double val)
{
foreach (var datum in @this)
{
datum.Value += val;
}
return @this;
}
如果我想总结所有工作时间,我可以这样做:
somelist.ForEach(busineshourindicator).InTimeRange(startdate, enddate).Sum();
这没有任何问题,如果 businessindicator = "business" 它仅在给定时间范围内的工作时间内求和。
但是,如果我想将所有这些组合在一个 for 循环中并在一个小时的时间表中组合多个数字(像这样):
public static double[] hourlyvec(double[] DelStart, double[] DelEnd, double[] position, object[] businessindicator, double PosStart, double PosEnd)
{
double nrhrs = (PosEnd - PosStart + 1) * 24;
List<Datum> result = new List<Datum>();
double tempdate = PosStart;
for (int i = 0; i < nrhrs; ++i)
{
result.Add(new Datum { DateTime = DateTime.FromOADate(tempdate), Value = 0 });
tempdate += (1 / 24);
}
for (int k = 0; k < DelStart.Length; k++)
{
result.ForEach(businessindicator[k]).InTimeRange(DateTime.FromOADate(DelStart[k]), DateTime.FromOADate(DelEnd[k])).Addition(position[k]);
}
return result.todoub().ToArray();
}
这失败了。我期望的快速示例:
第一行:Delstart = 3/1/13,DelEnd = 4/1/13,Businessindicator =“Business”,Position = 100
第二行:Delstart = 3/1/13,DelEnd = 4/1/13,Businessindicator ="Offhours",Position = 50
第三行:Delstart = 3/1/13,DelEnd = 4/1/13,Businessindicator =“ALL”,Position = 75
开始 = 13 年 3 月 1 日,结束 = 13 年 4 月 1 日
然后该函数应返回 24 小时的每小时向量,其中 1-8 小时 = 125,9-20 小时 = 175,其余小时再次为 125。
所有这些扩展方法似乎都可以单独使用,但是当我将它们组合成一个循环时,我没有得到正确的答案。
抱歉这篇冗长的帖子,我希望我的意思很清楚。
谢谢!