2017-10-16 119 views
2

.NET Framework中,您可以輕鬆地反映方法。例如:.NET標準中的GetMethod等效標準

var methodInfo = typeof(object).GetMethod("MemberwiseClone", bindingFlags); 

.NET Standard項目,然而,編譯器會抱怨:

錯誤CS1061: '類型' 不包含定義 'GetMethod' 和 沒有擴展方法 'GetMethod' 接受類型 「類型」第一個參數可以找到(是否缺少using指令或程序 集引用?)

問:你如何使用.NET Standard進行等效反射?

回答

6

對於差不多所有在.NET Core 1.x中的反思,您需要一個TypeInfo而不是Type

還有的GetTypeInfoSystem.Reflection命名空間的擴展方法,讓你想:

using System.Reflection; // For GetTypeInfo 
... 
var methodInfo = typeof(object).GetTypeInfo().GetMethod("MemberwiseClone", bindingFlags); 

注意TypeInfo.GetMethod()不存在.NET標準早於1.6,但由於1.0 TypeInfo.DeclaredMethods一直英寸

.NET Standard 2.0將成員重新引入到System.Type(作爲將桌面框架的大部分恢復到.NET標準中的一部分),因此在瞄準2.0+時不需要經過這個框架。

+1

值得注意的是,在.NET標準2.0中,你可以'typeof(object).GetMethod' – Evk

+0

@Evk:Yup,會注意到這一點。 –

+0

看來VS 2017.4搭配1.6。 – l33t