反思执行装配

时间:2011-02-11 12:50:11

标签: c# linq assemblies

我有以下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()")

但我真的不喜欢这个解决方案,所以这是我的2部分问题

  1. 有没有更好的方法来获取命名空间条件正确的方法? 和
  2. 为什么type.Namespace会失败?
  3. 关注, 斯蒂

1 个答案:

答案 0 :(得分:2)

根命名空间中的类型可以具有空命名空间,因此它在null上调用.StartsWith;首先消除那些:

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