是否可以过滤所有在dll中使用的声明变量的结构?
对于静态字段,我使用以下代码:
foreach (FieldInfo targetfield in InputType.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static))
{
}
有没有可能的方法呢?
答案 0 :(得分:3)
您可能只需要以下类型:
Int32
,这是一种值类型,但同样可能不是您想要考虑的“结构”):请参阅IsPrimitive属性。这样的事情:
const BindingFlags bindingFlags =
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static;
var structFields = from field in InputType.GetFields(bindingFlags)
let type = field.FieldType
where type.IsValueType
&& !type.IsEnum
&& !type.IsPrimitive
select field;
foreach (var targetField in structFields) { ... }
可能出乎意料的一件事:这将包括内置但非原始的值类型,如DateTime和TimeSpan ......因为它们是结构。你必须决定是否可以,这取决于你想要做什么。 (在我的情况下,我不想要它们。)如果你决定在结果中不想要这些,那么可能有以下几种可能性:
type != typeof(DateTime)
)。type.Assembly != typeof(object).Assembly
)。答案 1 :(得分:0)
你的意思是成员变量又是字段还是局部变量?在后一种情况下,你应该走一个反编译器的输出......就像塞西尔:http://mono-project.com/Cecil