我需要一种通过反射来检查类型使用的所有命名空间的方法。
namespace My.Program.BaseTypes
{
using System;
using System.Text;
using My.Program.Extenders;
using My.Program.Helpers;
using My.Program.Interfaces;
public class MyTypeBase
{
public MyTypeBase()
{
}
public My.Program.Helpers.HelperTypeX X
{
get;
set;
}
public My.Program.Extenders.ExtenderTypeY Y
{
get;
set;
}
public My.Program.Interfaces.InterfaceZ IZ
{
get;
set;
}
}
}
我的代码中只有Type
MyTypeBase,需要使用反射查找MyTypeBase中所有属性的所有引用名称空间。
当然,我可以遍历所有属性,从中获取类型并检查它们的名称空间,但是有更清晰的方法来实现这个目标吗?
为了防止这个问题,它是为了编写一个生成器,它将根据一些遗留代码创建新的类。
答案 0 :(得分:1)
不,我想不出更干净的方式。使用一堆命名空间没有真正的类型本身概念 - 它有成员本身引用类型(在属性/返回类型,字段类型,事件处理程序类型,嵌套类的类型或参数类型)但是那些只是个人成员。
从好的方面来说,使用LINQ并不难做......像:
var namespaces = type.GetProperties()
.Select(p => p.PropertyType.Namespace)
.Distinct();
请注意,这不会获取索引器参数类型的名称空间。