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

发布于 2025-01-01 18:03:53 字数 593 浏览 1 评论 0原文

我不知道:

  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

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

I don't know:

  1. if this works.
  2. if it's a good idea.
  3. what it is called in order
    to find out more about it.

But I think the intent is fairly apparent.

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>();

    }
}

Intended usage:
var customer = order.Sale.OrNew().Customer.OrNew().Name

What am I doing? Is this insane or helpful? It seems helpful.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

横笛休吹塞上声 2025-01-08 18:03:53

我认为使用 OrNew 方法的想法很好。特别是如果您正在努力制作流畅的界面。不过,我会改变 3 件事:

  1. 没有控制行为的隐藏标志 (ThrowIfNull)。这使得某人无法阅读 OrNew 调用并理解它的作用。
  2. 使用 new 约束来支持不太安全的 Activator.CreateInstance() 调用,
  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();
  }
}

I think the idea of having an OrNew method is fine. Especially if you're striving to make a fluent interface. However I would change 3 things about it

  1. Don't have a hidden flag that controls the behavior (ThrowIfNull). This makes it impossible for someone to read an OrNew call an understand what it does.
  2. Use a new constraint in favor of the less safe Activator.CreateInstance<T>() call
  3. I'd call it something other than DebugLogic. Generally (but not always) extension method containers end with the Extensions .

For example

public static class LogicExtensions {
  public static T OrNew<T>(this T obj) where T : class, new() {
    if (obj != null) {
      return obj;
    }
    return new T();
  }
}
浪菊怪哟 2025-01-08 18:03:53

这个操作的名称很明确:DefaultIfNull

The name of this operation is clearly: DefaultIfNull

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文