如何在C#反射中列出当前类的字段(这个.GetType()有问题)?

如何在C#反射中列出当前类的字段(这个.GetType()有问题)?,c#,.net,reflection,C#,.net,Reflection,编译器接受这一点: FieldInfo[] fieldInfos; fieldInfos = typeof(MyClass).GetFields(BindingFlags.NonPublic | BindingFlags.Instance); FieldInfo[] fieldInfos; fieldInfos = typeof(this.GetType()).GetFields(BindingFlags.NonPublic | BindingFlags.Instance); 编译器不接受这

编译器接受这一点:

FieldInfo[] fieldInfos;
fieldInfos = typeof(MyClass).GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
FieldInfo[] fieldInfos;
fieldInfos = typeof(this.GetType()).GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
编译器不接受这一点:

FieldInfo[] fieldInfos;
fieldInfos = typeof(MyClass).GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
FieldInfo[] fieldInfos;
fieldInfos = typeof(this.GetType()).GetFields(BindingFlags.NonPublic | BindingFlags.Instance);

如何修复第二种语法?

GetType
调用周围不需要
typeof()
,因为它已经返回了一个Type对象
typeof
是一种特殊语法,用于从类型名称中获取
Type
对象,而无需执行类似
Type.GetType(“Foo”)
的操作


typeof
不允许您传入
系统的实例。Type
typeof
是一个运算符,其唯一参数是一个类型(如
Int32
,或
object
,或
MyClass
),它返回
System.type
的实例。当您已经有一个对象的实例时,只需调用
GetType
,就可以获得
System.Type
的实例。所以说

fieldInfos = this.GetType()
                 .GetFields(BindingFlags.NonPublic | BindingFlags.Instance);

在第二个示例中,您不需要
类型的
。只需使用:

 FieldInfo[] fieldInfos = this.GetType().GetFields(BindingFlags.NonPublic |
                                                   BindingFlags.Instance);
typeof
的要点是它是一种“文字”格式,用于获取
Type
引用
GetType()
已经返回了一个类型,所以您不需要它

换句话说,假设你想要一根绳子。。。您不会使用:

string x = "y.ToString()";
你只要使用

string x = y.ToString();

将引号替换为
typeof()
,这是同一类型的东西…

如图所示,
typeof
仅在将类型符号视为
type
object时使用。乔恩,把简单的东西留给其他人,来吧,马上去帮助人们ddd9@flq:不需要帮助-Mark Rendle做得非常出色:)
FieldInfo[] fieldInfos = this.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);