在.NET Framework
中,您可以轻松地反映方法。 E.g:
var methodInfo = typeof(object).GetMethod("MemberwiseClone", bindingFlags);
然而,在.NET Standard
项目中,编译器抱怨:
错误CS1061:'输入'不包含' GetMethod'的定义和 没有扩展方法' GetMethod'接受第一个类型的参数 '类型'可以找到(你是否错过了使用指令或 装配参考?)
问:如何使用.NET Standard
执行等效反射?
答案 0 :(得分:8)
对于.NET Core 1.x中几乎所有反射,您需要TypeInfo
而不是Type
。
GetTypeInfo
命名空间中有System.Reflection
的扩展方法,因此您需要:
using System.Reflection; // For GetTypeInfo
...
var methodInfo = typeof(object).GetTypeInfo().GetMethod("MemberwiseClone", bindingFlags);
请注意,TypeInfo.GetMethod()
不存在早于1.6的.NET Standard,但TypeInfo.DeclaredMethods
自1.0以来就已存在。
.NET Standard 2.0将成员重新引入System.Type
(作为将大部分桌面框架恢复到.NET Standard中的一部分),因此在定位2.0 +时无需通过此环节。