编译器接受了这一点:
FieldInfo[] fieldInfos;
fieldInfos = typeof(MyClass).GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
编译器不接受:
FieldInfo[] fieldInfos;
fieldInfos = typeof(this.GetType()).GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
如何修复第二种语法?
答案 0 :(得分:9)
typeof()
调用周围不需要GetType
,因为它已经返回了一个Type对象。 typeof
是从类型名称获取Type
对象的特殊语法,无需执行Type.GetType("Foo")
之类的操作。
FieldInfo[] fieldInfos;
fieldInfos = GetType().GetFields(BindingFlags.NonPublic |
BindingFlags.Instance);
答案 1 :(得分:2)
typeof
不允许您传入System.Type
的实例。 typeof
是一个运算符,其唯一参数是类型(如Int32
或object
或MyClass
),并返回System.Type
的实例。当您已有对象的实例时,只需调用GetType
即可获得System.Type
的实例。因此,只需说明
fieldInfos = this.GetType()
.GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
答案 2 :(得分:2)
在第二个示例中,您不需要typeof
。只需使用:
FieldInfo[] fieldInfos = this.GetType().GetFields(BindingFlags.NonPublic |
BindingFlags.Instance);
typeof
的要点是获取Type
引用的某种“文字”格式。 GetType()
已经返回了一个类型,因此您不需要它。
换句话说,假设你想要一个字符串...你不会使用:
string x = "y.ToString()";
你只需要使用
string x = y.ToString();
将引号替换为typeof()
,它就是同样的东西......
答案 3 :(得分:2)
FieldInfo[] fieldInfos = this.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);