簡體   English   中英

C#:發現擴展方法

[英]C#: Discovering Extension Methods

您推薦哪些工具或技術來發現代碼中的 C# 擴展方法? 它們位於正確的命名空間中,但可能位於解決方案中的任何文件中。

具體來說:

  • 如何在代碼窗口中找到當前類型的所有擴展方法(並導航到它們)?

我確實有 Resharper (v4),所以如果它有我不知道的機制 - 請分享!

如果您有來源,那么您可以使用正則表達式搜索this Type identifier 考慮到它必須是函數的第一個參數,這樣的事情應該可以解決問題:

\(this:b+:i:b+:i

至少通過這種方式,您可以發現擴展方法的定義位置並添加該命名空間,然后依賴智能感知。 只是在一個不平凡的項目上運行了這個,到處都有很多擴展方法,而且效果很好。 唯一的誤報是這樣的:

if(this is Blah...

我們可以通過在搜索中添加static來解決這個問題,因為擴展方法必須是靜態的:

static.*\(this:b+:i:b+:i

這不適用於以下情況:

public
  static ExtensionMethod(
   this int
    iVal) {
}

但這是正則表達式的一種限制。 我相信某些人可以告訴你所有關於使用正則表達式解析語言的痛苦。

現在,我認為 IDE 缺少的是識別非導入命名空間中的擴展方法的能力。 與您知道類名類似,如果您鍵入它,IDE 會提示您顯式使用它或導入命名空間。 畢竟,這就是我導入所有命名空間的方式,並且經常發現自己試圖對擴展方法做同樣的事情。

這是相當低技術的,但是 Ctrl-F 搜索 "this:b+MyClassName" 怎么樣?

如果您使用的是我猜您是智能感知的 VS,它將為您顯示給定對象的所有可用擴展方法(標有添加到通常實例方法圖標中的藍色事物)。 該列表可能因文件而異(稱為 aMethod 的方法可能意味着兩個不同文件中的兩個不同事物),即使對象類型相同(這取決於找到擴展方法的方式)

如果您有 resharper,只需按住 ctrl 鍵並單擊該方法。

如果您在 Visual Studio 中安裝了 ILSpy 擴展(我使用的是 2022),那么您可以:

  • 右鍵單擊類/類型並選擇 -> 在 ILSpy 中打開代碼
  • 在 ILSpy 中右鍵單擊類型並選擇 -> 分析
  • 在分析窗口中,您將看到一個節點“擴展方法”(如果存在,則不顯示任何節點)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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