是否可以过滤 dll 中使用的所有结构声明变量?
对于静态字段,我使用以下代码:
foreach (FieldInfo targetfield in InputType.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static))
{
}
有什么可能的方法吗?
您可能只需要以下类型:
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
) 中过滤掉所有内容。你的意思是成员变量又名字段还是局部变量?在后一种情况下,你应该走反编译器的输出......像塞西尔: http: //mono-project.com/Cecil