将应用程序配置值作为默认参数进行黑客攻击是一种代码味道吗?

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。