簡體   English   中英

C#中的重載分辨率:Func <T> 參數

[英]overload resolution in c#: Func<T> parameter

編寫此功能:

static TResult reduce<TSource, TResult>(ParallelQuery<TSource> source,
                                        Func<TResult> seedFactory,
                                        Func<TResult, TSource, TResult> aggregator) {
    return source.Aggregate(seedFactory, aggregator, aggregator, x => x);
}                

但出現編譯錯誤:

錯誤1方法'System.Linq.ParallelEnumerable.Aggregate( System.Linq.ParallelQuery<TSource>TAccumulateSystem.Func<TAccumulate,TSource,TAccumulate>System.Func<TAccumulate,TAccumulate,TAccumulate>System.Func<TAccumulate,TResult> )'不能從用法中推斷出來。 嘗試顯式指定類型參數。

我想使用的重載就是這一點,而編譯器似乎也認為也可以是這一點

我該如何協助?

問題是您的第三個參數-方法聲明中的第四個參數。 聲明為:

// Note: type parameter names as per Aggregate declaration
Func<TAccumulate, TAccumulate, TAccumulate> combineAccumulatorsFunc

但是您正在嘗試傳遞

// Note: type parameter names as per reduce declaration
Func<TResult, TSource, TResult> aggregator

除非編譯器知道TResult可轉換為TSource ,否則這是無效的。

基本上,您的方法僅采用單個聚合函數-到目前為止如何將累加器與另一個源值組合以創建另一個累加器。 您要調用的方法需要另一個函數,該函數將兩個累加器組合在一起以創建另一個累加器。 我認為您必須在方法中采用另一個參數才能使此方法起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM