3

我不知道:

  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

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

4

2 回答 2

6

我认为有一种OrNew方法的想法很好。特别是如果您正在努力制作流畅的界面。但是我会改变三件事

  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();
  }
}
于 2012-02-03T17:14:06.757 回答
0

这个操作的名字很清楚:DefaultIfNull

于 2012-02-03T19:38:19.797 回答