【发布时间】:2013-11-25 15:25:04
【问题描述】:
当一个变量重复多次时,我们使用一个局部变量来“解决”这个问题。当然,有时也会重复方法(调用)。例如,当检查应用程序设置时,如下所示。
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");
}
重复该方法不是很DRY (Don't Repeat Yourself),所以代表可以在这里提供帮助吗?起初,我想把它放到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 可能看起来像一个重复的问题,但它仍然不同,如果只是结果。
【问题讨论】:
-
对于不赞成投票的人,请发布原因和/或(建设性)反馈以进行改进。
标签: c# .net coding-style delegates dry