Вызов конструктора возвратил нуль: что делать? - PullRequest
3 голосов
/ 19 марта 2010

У меня есть код, который выглядит так:

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, поэтому я не уверен, должен ли я вообще что-либо обрабатывать, но я все еще хочу быть в безопасности и выдавать исключение, если что-то идет не так.

1 Ответ

5 голосов
/ 19 марта 2010

Вы должны убедиться, что nodeType является DirectiveNode:

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

Кроме того, вы можете (должны) использовать Activator.CreateInstance вместо того, чтобы вручную найти ConstructorInfo и вызывая его.Он чище, выразительнее и удобнее в обслуживании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...