c# - 要从工厂返回 "manual override"值,是检查 null 还是 bool 开关更好?

标签 c#

假设我们有这样的方法

public static IThing getTheThing() {
    return internalThingGetter();
}

并且我们希望出于调试或单元测试的目的,引入一种轻量级策略来手动覆盖它。

private static IThing _thingManualOverride;

public static IThing getTheThing() {
    if (/*some condition*/)
        return _thingManualOverride;
    else
        return internalThingGetter();
}

是检查 _thingManualOverride != null 还是引入一个新的 bool 值并检查(例如 _shouldOverride)更好?

或者,这里有没有更坚实的模式可以使用?

编辑:要满足的一些目标:

  • 假设保持界面很重要。许多代码使用此静态方法,更改它是一个不错的目标,但代价高昂。
  • 这两项检查都是“正确的”,因为如果覆盖为 null,我们可以安全地假设默认类(class)是正确的。

最佳答案

如果选择 _thingManualOverride != null。您可以检查其他字段,假设一个名为“_IsThingManualOverrideSet”的 bool 值,但由于程序员的错误,他们可能会给出冲突的值:

_thingManualOverride = null;
_IsThingManualOverrideSet = true; // <-- oops!

所以检查值本身是最好的方法。

关于c# - 要从工厂返回 "manual override"值,是检查 null 还是 bool 开关更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16320479/

相关文章:

c# - LINQ 将列交换为行

c# - 在 C# 中过滤文本文件

c# - C#.NET 中的粗线绘制问题

c# - 风格基于默认风格MAUI

c# - 正则表达式去除 JavaScript 双斜杠 (//) 风格的注释

c# - ComboBox遗失的项目

c# - Decimal 类型从 In-memory Sqlite 数据库中读取为 double 或 int

c# - 是否可以使用 AutoMapper 自动映射除一些复杂属性之外的所有属性?

c# - 使用c#加密数据并使用openssl api解密数据,为什么解密数据末尾有很多垃圾填充?

c# - 我对 Linq XML 查询感到困惑