我的代码如下:
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
将始终描述DirectiveNode
的子类。)
我不确定调用构造函数会返回null
,所以我不确定我是否应该处理任何事情,但我仍然希望安全起见并在出现问题时抛出异常
答案 0 :(得分:5)
您需要确保nodeType
是DirectiveNode
:
if (!typeof(DirectiveNode).IsAssignableFrom(nodeType))
throw new ArgumentException("The specified node type is not a 'DirectiveNode'");
此外,您可以(应该)使用Activator.CreateInstance
而不是手动查找ConstructorInfo
并调用它。它更清洁,更具表现力,更易于维护。