Размышляя о выполнении сборки - PullRequest
2 голосов
/ 11 февраля 2011

У меня есть следующий оператор linq

builtIn = (from type in Assembly.GetExecutingAssembly().GetTypes()
where type.IsClass && type.Namespace.ToUpper().StartsWith("PD3.MODULES.BUILTIN.")
let onStartMethod = type.GetMethod("Init")
where onStartMethod != null
select onStartMethod
);

но это работает, только если я пропущу

&& type.Namespace.ToUpper().StartsWith("PD3.MODULES.BUILTIN") часть: (

Далее по коду, я должен принять это во внимание, используя

if (builtInInit.ToString() == "Pd3.Module Init()")

но мне действительно не нравится это решение, так что вот мой вопрос из двух частей

  1. Есть ли лучший способ получить методы, в которых условие пространства имен корректно? и
  2. Почему происходит сбой type.Namespace?

С уважением, Стиг

1 Ответ

2 голосов
/ 11 февраля 2011

Типы в корневом пространстве имен могут иметь нулевое пространство имен, поэтому он вызывает .StartsWith для нулевого значения; просто сначала убери их:

... && type.Namespace != null && type.Namespace. {blah}
...