使用reflection来获得一个MethodInfo,我想testing返回的types是typeof System.Void。 testing它是否是System.Int32正常工作 myMethodInfo.ReturnType == typeof(System.Int32) 但 myMethodInfo.ReturnType == typeof(System.Void) 不编译? 目前我正在testing如果名称的string表示是“System.Void”,这似乎是非常错误的。
我认识到,一般来说,使用反思会有性能影响。 (实际上,我自己并不是一个反思的粉丝,这纯粹是一个学术问题。) 假设存在一些看起来像这样的类: public class MyClass { public string GetName() { return "My Name"; } } 忍受我在这里。 我知道,如果我有一个名为x的MyClass的实例,我可以调用x.GetName() 。 此外,我可以设置一个Func<string>variables为x.GetName 。 这是我的问题。 假设我不知道上面的类叫做MyClass ; 我有一些对象,但我不知道它是什么。 我可以通过执行以下操作检查该对象是否具有GetName方法: MethodInfo getName = x.GetType().GetMethod("GetName"); 假设getName不为空。 然后我不能进一步检查是否getName.ReturnType == typeof(string)和getName.GetParameters().Length == 0 ,在这一点上,我不会相当肯定,我的getName对象表示的方法可以肯定会被转换为Func<string> ,不知何故? 我意识到有一个MethodInfo.Invoke ,我也意识到我总是可以创build一个Func<string>如: Func<string> getNameFunc = () => getName.Invoke(x, null); 我想我问的是,如果有任何方法从一个MethodInfo对象到它所表示的实际方法,招致反映在过程中的性能成本,但在此之后 ,能够直接调用该方法(通过,例如,一个Func<string>或类似的东西) 没有性能损失。 我所设想的可能是这样的: // obviously this would […]