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

时间:2012-02-03 17:09:19

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

我不知道:

  1. 如果有效。
  2. 如果这是个好主意。
  3. 按顺序调用它 了解更多信息。
  4. 但我认为意图非常明显。

    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

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

2 个答案:

答案 0 :(得分:6)

我认为使用OrNew方法的想法很好。特别是如果你正在努力建立一个流畅的界面。但是我会改变它的3件事

  1. 没有隐藏的标志来控制行为(ThrowIfNull)。这使得某人无法阅读OrNew电话,了解它的作用。
  2. 使用new约束支持较不安全的Activator.CreateInstance<T>()电话
  3. 我称之为DebugLogic以外的其他内容。通常(但不总是)扩展方法容器以Extensions结尾。
  4. 例如

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

答案 1 :(得分:0)

此操作的名称显然是:DefaultIfNull