簡體   English   中英

可以從立即窗口中調用擴展方法

[英]Can Extension Methods Be Called From The Immediate Window

我問這個問題,因為每當我嘗試從Visual Studio 2010的“即時”窗口調用擴展方法時,都會出現以下錯誤:

System.Collections.Generic.IEnumerable'不包含'ToList'的定義,找不到擴展方法'ToList'接受類型為'System.Collections.Generic.IEnumerable'的第一個參數(是否缺少using指令或組裝參考?)

如果“即時”窗口不支持擴展方法,那為什么當我鍵入變量(類型為IEnumerable<QueryFilter> )后跟一個點時,IntelliSense會列出所有擴展方法嗎?

我在“命令”窗口中鍵入的內容沒有任何問題,因為如果我將其復制並粘貼到代碼文件中並運行,它將可以正常工作。

使用Visual Studio 2012,對相同的解決方案執行相同的操作即可正常工作。 如果我切換回VS2010,問題仍然存在。

擴展方法是語法糖。 實際上,使用this關鍵字是static實現的。 您可以使用提供擴展方法的靜態方法來調用任何擴展方法。 然后,應將正在擴展的對象作為第一個參數傳遞。

這是因為System.Linq命名空間未在調試時的當前上下文中導入。

using System.Linq;

在您的代碼中。

Visual Studio 2010的示例

在此處輸入圖片說明

第一次導入System.LINQ ,然后不using System.LINQ

編輯 :如果導入了名稱空間,並且IntelliSense正在顯示方法,則可能是“即時”窗口的錯誤。 請參閱connect上的此錯誤條目

擴展方法只是靜態方法。

您應該能夠使用例如System.Linq.Enumerable.ToList()

擴展方法轉換為“ Enumerable.ToList”編譯器通常會轉換

myList.Tolist();

至:

Enumerable.ToList(myList);

在編譯時。 我相信,如果您願意的話,可以從quickwatch窗口中使用擴展方法。

此行為是由Code Contracts引起的,不僅限於“立即”窗口,而且還包括“條件斷點”窗口。

2016年3月1日更新:找到了這個MSDN問題 ,為什么我的觀察窗口中的類型解析不起作用。 所描述的行為與我使用“立即窗口”時遇到的行為完全相同。 原因也歸因於CodeContracts,並且在Microsoft Connect上已提交了錯誤報告。 沒有指出該錯誤是否已解決。

暫無
暫無

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

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