[英]Linq Extension Methods Not available in Visual Studio 2015 Immediate Window
[英]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.