簡體   English   中英

使用反射檢查方法是否為“擴展方法”

[英]Using reflection to check if a method is "Extension Method"

作為我的應用程序的一部分,我有一個接收 MethodInfo 的函數,需要根據該方法是否為“擴展方法”對其進行特定操作。

我檢查了 MethodInfo 類,但找不到任何表明該方法是擴展的IsExtension屬性或標志。

有誰知道我如何從方法的 MethodInfo 中找到它?

您可以在 MethodInfo 實例上調用IsDefined方法,通過檢查ExtensionAttribute是否應用於該方法來找出這一點:

bool isExtension=someMethod.IsDefined(typeof(ExtensionAttribute),true);

基於

C# 中的 F# 擴展方法

編譯后的表單上似乎有一個屬性。 所以看看這個方法有沒有這個屬性:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM