Lex*_*ebb 2 c# java reflection
我目前正在将一个框架的一部分从java移植到C#.
我在Java中使用以下行来按照我的抽象类的子类的声明顺序获取声明的字段.然后,我将使用此字段列表通过反射设置值.
Field[] fields = this.getClass().asSubclass(this.getClass()).getDeclaredFields();
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下方法在C#中获得相同的结果.但这也将返回超类的所有公共领域.
IEnumerable<FieldInfo> fields = this.GetType().GetFields().OrderBy(field => field.MetadataToken);
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以在C#中实现与Java方法相同的结果.
重复一遍,我只需要我当前类的任何子类的声明字段.
你只需要使用BindingFlags.DeclaredOnly:
指定仅应考虑在提供的类型的层次结构级别声明的成员.不考虑继承的成员.
例如,假设您也想要私有字段,以及实例和静态字段 - 删除您不想要的标志:
var fields = GetType().GetFields(BindingFlags.DeclaredOnly |
BindingFlags.Public |
BindingFlags.NonPublic |
BindingFlags.Static |
BindingFlags.Instance)
.OrderBy(...);
Run Code Online (Sandbox Code Playgroud)