當變量重複多次時,我們使用局部變量來「解決」這個問題。當然,還有時間重複方法(調用)。例如,如下所示檢查應用程序設置時。重複該方法還是一個委託?
static T Get<T>(NHibernateSetting key, T defaultValue) {
// Do something
}
void setApplicationSettings() {
var logFileName = Settings.Get(Setting.LogFileName, "default.log");
if (/* Do some check */)
configuration.LogFile(logFileName);
var adoNetBatchSize = Settings.Get<int?>(Setting.AdoNetBatchSize, null);
if (adoNetBatchSize.HasValue)
configuration.AdoNetBatchSize(adoNetBatchSize.Value);
if (Settings.Get(Setting.UseReflectionOptimizer, true))
configuration.UseReflectionOptimizer();
if (Settings.Get(Setting.GenerateStatistics, false))
configuration.Raw("generate_statistics", "true");
}
重複的方法不是很所以委託人可以幫忙嗎?起初,我想把它放入如下的Func<in T1, in T2, out T3>
。在性能方面,這將等於該方法的原始本地調用,對吧?
var typedGetter = new Func<NHibernateSetting, String, String>(Settings.Get);
然後,我碰到了下一個問題,因爲String
是不是正在使用,所以我想通過輸入了所有需要的類型揹負的唯一T
。我嘗試了以下,但它沒有奏效。有關如何解決這個問題的任何信息?
var genericGetter = new Func<NHibernateSetting, T, T>(Settings.Get);
重複。問題Delegate to replace repeating code可能看起來像一個重複的問題,但它不同,但如果只是結果。
對於downvote的人,請張貼原因和/或(建設性)反饋來改進。 –