c# - 此方法尝试的术语是什么?

标签 c# extension-methods nullreferenceexception null-coalescing-operator

我不知道:

  1. 如果这可行。
  2. 如果这是个好主意。
  3. 按顺序叫什么 了解更多信息。

但我认为其意图相当明显。

public static class DebugLogic
{
    public static bool ThrowIfNull = false;

    public static T OrNew<T>(this T obj) where T : class
    {
        if (obj != null) return obj;
        else if (ThrowIfNull) throw new ArgumentNullException(//to do...);
        else return Activator.CreateInstance<T>();

    }
}

预期用途: var customer = order.Sale.OrNew().Customer.OrNew().Name

我在做什么?这是疯狂还是有帮助?它似乎有帮助。

最佳答案

我认为拥有一个 OrNew 的想法方法很好。特别是如果您正在努力打造流畅的界面。但是我会改变 3 件事

  1. 没有控制行为的隐藏标志 (ThrowIfNull)。这使得某人无法阅读 OrNew打电话了解它的作用。
  2. 使用 new有利于不太安全的约束Activator.CreateInstance<T>()打电话
  3. 我会称它为 DebugLogic 以外的名称.通常(但不总是)扩展方法容器以 Extensions 结尾.

例如

public static class LogicExtensions {
  public static T OrNew<T>(this T obj) where T : class, new() {
    if (obj != null) {
      return obj;
    }
    return new T();
  }
}

关于c# - 此方法尝试的术语是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9132552/

相关文章:

c# - 如何在 F# 中定义 T[] 的类型扩展?

c# - XNA 中的空引用异常

c# - Windows XAML 中的 SQLite (PCL) 查询不允许超过 21 列?

c# - 如何在 UserControl 组件上查找 WPF 中的所有控件

c# - 我可以使用 Selenium WebDriverWait 等待相对于已知 Web 元素的 xpath 吗?

c# - Twilio 休息 API 错误代码 21612

c# - 编写 DataSet 扩展时无法访问 DataRow 构造函数?

c# - 使用以下字符的 XML 无效 £ ` –

swift - 在扩展中创建通用排序函数

c# - 如何检查字符串是否为空并在同一行中分配其值