[英]Using reflection to check if a method is "Extension Method"
作為我的應用程序的一部分,我有一個接收 MethodInfo 的函數,需要根據該方法是否為“擴展方法”對其進行特定操作。
我檢查了 MethodInfo 類,但找不到任何表明該方法是擴展的IsExtension屬性或標志。
有誰知道我如何從方法的 MethodInfo 中找到它?
您可以在 MethodInfo 實例上調用IsDefined方法,通過檢查ExtensionAttribute是否應用於該方法來找出這一點:
bool isExtension=someMethod.IsDefined(typeof(ExtensionAttribute),true);
基於
編譯后的表單上似乎有一個屬性。 所以看看這個方法有沒有這個屬性:
http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.extensionattribute.aspx
這看起來與之前的問題非常相似,可能值得一看。 那里的建議是尋找帶有ExtensionAttribute 的類和方法,這聽起來像您所追求的。
如果您知道從實例獲取MethodInfo
,則可以輕松檢查該方法是否是靜態的。 擴展方法只是語法糖,並轉換為傳入實例的靜態方法調用。
編譯器不會在編譯時將所有擴展方法切換為靜態方法調用嗎?
myList.First();
變成
Enumerable.First(myList);
如果是這種情況,則 .net 運行時(您正在反射的地方)中沒有擴展方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.