代码之家  ›  专栏  ›  技术社区  ›  strager

构造函数调用返回空值:该怎么办?

  •  3
  • strager  · 技术社区  · 14 年前

    我有代码,看起来像:

    private static DirectiveNode CreateInstance(Type nodeType, DirectiveInfo info) {
        var ctor = nodeType.GetConstructor(new[] { typeof(DirectiveInfo) });
    
        if(ctor == null) {
            throw new MissingMethodException(nodeType.FullName, "ctor");
        }
    
        var node = ctor.Invoke(new[] { info }) as DirectiveNode;
    
        if(node == null) {
            // ???;
        }
    
        return node;
    }
    

    我正在寻找当 Invoke 方法返回的内容不是 DirectiveNode 或者当它回来的时候 null (表示为 // ??? 以上)。

    (根据方法合同, nodeType 将始终描述的子类 直接节点 )

    我不确定何时调用构造函数会返回 无效的 因此,我不确定是否应该处理任何事情,但我仍然希望站在安全的一边,并在出现问题时抛出异常。

    1 回复  |  直到 14 年前
        1
  •  5
  •   Sam Harwell    14 年前

    你需要确保 nodeType 是一个 DirectiveNode :

    if (!typeof(DirectiveNode).IsAssignableFrom(nodeType))
        throw new ArgumentException("The specified node type is not a 'DirectiveNode'");
    

    另外,你可以 Activator.CreateInstance 而不是手动查找 ConstructorInfo 并调用它。它更干净,更具表现力,更易于维护。