将应用程序配置值作为默认参数进行黑客攻击是一种代码味道吗?
Is hacking an app config value as a default parameter a code smell?
我是第一次尝试使用 App.config 和配置管理器。我想使用 App.config 中的某些值作为某些方法的默认参数,但这会导致错误(不是编译时间常数):
public void ThisDoesntWork(string parameter = ConfigurationManager.AppSettings["SettingName"])
{
// Error: not a compile time constant.
}
我有点理解为什么会这样,所以我找到了这个解决方法:
public void ThisWorks(string parameter = "Use App.config")
{
if(parameter == "Use App.config")
{
parameter = ConfigurationManager.AppSettings["SettingName"]
}
// Rest of method.
}
应该注意的是,这也可用于使静态方法(或任何非编译时常量)的 return 值成为默认参数值。
我觉得这有点奇怪,我想知道这是否是一种代码味道。
有没有人以前使用过此变通方法 运行 遇到过任何问题?这种情况下的最佳做法是什么?
如何使用配置值作为我的方法参数的默认值而不使用 hack 和产生代码异味?
而不是通过魔法使用 hack string/null - 你应该简单地创建你的方法的两个重载。
第一个是 parameter-less 并使用 app.config 中的值来调用第二个(它具有没有默认值的必需参数)。
干净整洁,消除了 confusion/ambiguity。
我是第一次尝试使用 App.config 和配置管理器。我想使用 App.config 中的某些值作为某些方法的默认参数,但这会导致错误(不是编译时间常数):
public void ThisDoesntWork(string parameter = ConfigurationManager.AppSettings["SettingName"])
{
// Error: not a compile time constant.
}
我有点理解为什么会这样,所以我找到了这个解决方法:
public void ThisWorks(string parameter = "Use App.config")
{
if(parameter == "Use App.config")
{
parameter = ConfigurationManager.AppSettings["SettingName"]
}
// Rest of method.
}
应该注意的是,这也可用于使静态方法(或任何非编译时常量)的 return 值成为默认参数值。
我觉得这有点奇怪,我想知道这是否是一种代码味道。
有没有人以前使用过此变通方法 运行 遇到过任何问题?这种情况下的最佳做法是什么?
如何使用配置值作为我的方法参数的默认值而不使用 hack 和产生代码异味?
而不是通过魔法使用 hack string/null - 你应该简单地创建你的方法的两个重载。
第一个是 parameter-less 并使用 app.config 中的值来调用第二个(它具有没有默认值的必需参数)。
干净整洁,消除了 confusion/ambiguity。