我不知道:


如果可行。
如果是个好主意。
所谓的顺序
了解更多信息。


但是我认为其意图是显而易见的。

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方法的想法很好。特别是如果您正在努力制作一个流畅的界面。但是我会改变三件事


没有用于控制行为的隐藏标志(ThrowIfNull)。这使得某人无法阅读OrNew呼叫以了解其作用。
使用new约束以支持不太安全的Activator.CreateInstance<T>()调用
我称其为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();
  }
}

10-08 02:46