編輯:對於我的變量的名稱混淆抱歉。 TotalHours和Hours確實是TimeSpans,我正在總結TimeSpans,而不是Timespan的Hours屬性。IEnumerable的總和方法擴展<TimeSpan>
我目前使用這在我的表總結(類型爲時間跨度)的小時數列:
TotalHours = MainGridTable.Select(x => x.Hours).Aggregate((x,y) => x.Add(y));
我試圖做的點心擴展了IEnumerable這樣,但它不工作:
public static TimeSpan Sum<TSource>(this IEnumerable<TSource> source, Func<TSource, TimeSpan> selector)
{
return source.Aggregate(((t1, t2) => t1.Add(t2));
}
我搜索了.NET源代碼,並發現,現有的總和方法爲退貨:
return Enumerable.Sum(Enumerable.Select(source, selector));
然後我試着把這個非泛型的Sum擴展做成Enumerable,但是它沒有被上面的return語句所識別,並且它只是一直要求一個十進制參數。
public static TimeSpan Sum(this IEnumerable<TimeSpan> source) {
TimeSpan sum = new TimeSpan(0, 0, 0);
foreach (TimeSpan v in source) {
if (v != null) sum.add(v);
}
return sum;
}
我對功能,擴展和泛型不太熟悉。我的錯誤是什麼?我該如何做這項工作?
請發佈[mcve]。你當前的代碼有幾個不相關的錯誤,大概是不存在於你的真實代碼中的。這使得很難分辨實際問題是什麼。 – hvd
TotalHours = MainGridTable.Sum(x => x.Hours),如果您只是想將IEnumerable中的每個TimeSpan的值相加。你想要什麼超過時間總和 –
@MrinalKamboj我認爲'小時'是'TimeSpan'類型的屬性,並且OP不加總'TimeSpan.Hours'屬性。或者我誤解了你的評論? – hvd