Java到C#转换查找具有反射的子类的公共字段

Java到C#转换查找具有反射的子类的公共字段,java,c#,reflection,Java,C#,Reflection,我目前正在将一个框架的一部分从java移植到C 我在Java中使用了下面的一行代码,按照我的抽象类的子类声明的顺序来获取声明的字段。然后,我将使用此字段列表通过反射设置值 Field[] fields = this.getClass().asSubclass(this.getClass()).getDeclaredFields(); 我尝试使用以下方法在C#中获得相同的结果。但这也将返回超级类的所有公共字段 IEnumerable<FieldInfo> fields = this.

我目前正在将一个框架的一部分从java移植到C

我在Java中使用了下面的一行代码,按照我的抽象类的子类声明的顺序来获取声明的字段。然后,我将使用此字段列表通过反射设置值

Field[] fields = this.getClass().asSubclass(this.getClass()).getDeclaredFields();
我尝试使用以下方法在C#中获得相同的结果。但这也将返回超级类的所有公共字段

IEnumerable<FieldInfo> fields = this.GetType().GetFields().OrderBy(field => field.MetadataToken);
IEnumerable fields=this.GetType().GetFields().OrderBy(field=>field.MetadataToken);
是否有某种方法可以在C#中实现与Java方法相同的结果


重复一下,我只需要当前类的任何子类的声明字段。

传递
BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly
您只需要使用:

指定只应考虑在所提供类型的层次结构级别声明的成员。不考虑继承的成员

例如,假设您还需要私有字段,以及实例字段和静态字段,请删除不需要的标志:


这只会得到任何子类的字段吗?@LexWebb:这不会返回超类声明的字段。也许我还没有喝足够的咖啡,但是“this.getClass().asSubclass(this.getClass())”与“this.getClass()”有什么不同?哈哈,可能不是。那是我不久前写的。我可能是想确保它只是子类。
var fields = GetType().GetFields(BindingFlags.DeclaredOnly | 
                                 BindingFlags.Public |
                                 BindingFlags.NonPublic |
                                 BindingFlags.Static |
                                 BindingFlags.Instance)
                      .OrderBy(...);