在導入的程序集中存在擴展方法時需要遵守什麼條件?我在類庫項目中構建了一個項目,但在我的Web項目中沒有識別出引用該庫的項目。庫中的所有其他類和方法都是可信的,但是這種擴展方法不是。擴展方法在庫中使用時可見。未識別的擴展方法
未識別的擴展方法
回答
引用包含具有擴展方法的類的程序集是不夠的。您需要在每個要使用擴展方法的源文件中導入包含該類的名稱空間。
例如,使用LINQ到對象,則需要引用System.Core程序集並導入System.Linq的命名空間(其中包含與LINQ擴展方法的枚舉類):
using System.Linq;
您確定擴展方法是公開的嗎?
是這個類被標記爲public static,因爲它是擴展方法。 – ChiliYago 2010-04-07 16:58:10
Ohhhh YESSSSS!這是我的問題!非常感謝 ! – 2014-06-17 15:05:34
如果擴展方法不使用擴展語法時可調用,可以使用以下格式:
this.MyExtensionMethod()
這清除了我沒有找到在VS2010類的擴展方法的問題。
那麼使它成爲擴展方法有什麼意義? – 2014-12-02 10:43:38
@IanKemp它仍然是清晰的語法比'MyExtensionMethodsClass.MyExtensionMethod(本)',並允許您通過更換你的'using'換出的實現。這是一種解耦/依賴注入。 – binki 2016-02-02 20:38:50
@binki這似乎是我可以想象的做DI最不直觀和有用的方式。 – 2016-02-05 10:10:08
示例實現,幫助我:
(請注意,已經提到了this
關鍵字)。
/// <summary>
/// Convert current bytes to string
/// </summary>
/// <param name="bytes">Current byte[]</param>
/// <returns>String version of current bytes</returns>
public static string StringValue(this byte[] currentBytes)
{
return string.Concat(Array.ConvertAll(bytes, b => b.ToString("X2")));
}
對於任何人想知道的問題,我有同樣的問題沒有答案工作。原來,這是因爲組件的using
聲明別名:
using ex = MyApp.Example
刪除別名工作,但我決定,而不是添加重複的,非別名using
,這也解決了這一問題:
using MyApp.Example
using ex = MyApp.Example
我有這個問題,在解決方案的引用中使用擴展方法,如下所示。 Intellisense在ApplicationUI項目中爲擴展方法工作,它甚至運行時沒有編譯或運行時錯誤。但這種方法根本行不通。此外,立即窗口向我保證BusinessObjectLib.MyEnum不包含具有我的擴展方法名稱的方法,並且不能找到任何擴展方法。
GenericLib - project where extension method on generic enums is defined
BusinessObjectLib - project where enums were defined, references GenericLib
ApplicationUI - project referencing both GenericLib and BusinessObjectLib
即使這樣,解決方案管理器看起來不錯,從ApplicationUI查看所有項目,當我打開BusinessObjectLib項目,我可以看到它的參考GenericLib被打破出於某種原因。 (就像我們所有的代碼一樣,VS也可能有錯誤?)。首先,我在VS中直接打開的BusinessObjectLib項目中工作,刪除ref,然後刪除項目,然後以相反的順序恢復。然後我重命名了ApplicationUI.sou文件並強制它重建。我能夠通過這些操作來解決這個問題,但只有.sou文件重命名似乎有訣竅。即時窗口仍然繼續給我同樣的錯誤,但至少運行時代碼再次工作。我在其他幾個項目中使用這種確切的模式,而沒有我在這裏遇到的那種問題。
任何人誰,同時具有在VB.NET同樣的問題在這裏登陸,請注意,不僅擴展方法,但模塊本身需要被標記爲Public
,否則你會得到這個錯誤。至少在VS2015社區中情況就是這樣,在其他版本中也可能會出現這種情況。
在我的情況,擴展方法是在其中引用的不同版本的組件的外部參考。我在兩個項目上同步了版本並且工作。
確保如果使用模板,模板匹配的聲明是什麼與方法簽名中聲明,「本」 ..
所以,
SomeClass<string, string> test = new SomeClass<string, string>();
extensionMethod<key, val>(this SomeClass<key, Lazy<val>>, string val)
{
}
擴展方法將不會出現,因爲懶惰的包裝。
不知道-1是爲了什麼,但是這是我的問題,我在擴展名改成類型和忘了做它的聲明和編譯器顯示沒有問題,沒有注意到它的時候了。 也許是因爲我說的模板意外,而不是仿製藥。但重點是。 – eaglei22 2017-06-06 20:07:33
- 1. LINQ to Entities方法未識別 - 擴展方法樣式
- 2. 擴展方法無法識別
- 3. 方法未識別
- 4. VS2012的JSLint擴展無法識別JSON
- 5. Chrome擴展 - JS功能無法識別
- 6. 查看模型無法識別擴展方法?
- 7. 擴展方法未顯示
- 8. 爲什麼帶約束的通用擴展方法不被識別爲擴展方法?
- 9. 將LINQ擴展到實體以識別自定義方法
- 10. 擴展類中未定義的方法
- 11. 擴展的charsets字符未被識別並轉換爲? mark
- 12. 未被TeamCity PowerShell Runner識別的PowerShell社區擴展
- 13. OCMStub中未識別的方法`返回'
- 14. java中未識別錯誤的方法
- 15. Selenium - ExpectedConditions的擴展方法無法識別,或者:更好的選擇?
- 16. 經由方法類擴展類類別
- 17. 別名module`s方法C(Ruby擴展)
- 18. NancyFX,HtmlHelpers <T>的擴展方法在剃刀視圖中無法識別
- 19. 擴展方法
- 20. 擴展方法
- 21. 的擴展方法
- 22. 可擴展枚舉的擴展方法
- 23. 擴展類成員的擴展方法?
- 24. 使用擴展方法的擴展類
- 25. HasMany和WithRequired擴展方法未找到
- 26. 枚舉擴展方法未顯示
- 27. 使用JAVACC識別擴展字符
- 28. PHP - 識別附件文件擴展名
- 29. 如何識別.pc擴展名
- 30. Adobe本機擴展 - 語音識別
類似:http://stackoverflow.com/questions/1138848/net-list-distinct – 2010-04-07 16:48:15