在導入的程序集中存在擴展方法時需要遵守什麼條件?我在類庫項目中構建了一個項目,但在我的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. 擴展方法無法識別
- 2. 方法未識別
- 3. VS2012的JSLint擴展無法識別JSON
- 4. 查看模型無法識別擴展方法?
- 5. 擴展方法未顯示
- 6. 爲什麼帶約束的通用擴展方法不被識別爲擴展方法?
- 7. 將LINQ擴展到實體以識別自定義方法
- 8. 擴展類中未定義的方法
- 9. NancyFX,HtmlHelpers <T>的擴展方法在剃刀視圖中無法識別
- 10. 擴展方法
- 11. 擴展類成員的擴展方法?
- 12. 使用擴展方法的擴展類
- 13. 使用JAVACC識別擴展字符
- 14. Adobe本機擴展 - 語音識別
- 15. PHP - 識別附件文件擴展名
- 16. LINQ to Entities - 未識別方法
- 17. 變量未被方法識別
- 18. Kotlin擴展方法作爲長方法名的別名?
- 19. 從BroadcastReceiver擴展的類中無法識別getSharedPreferences()
- 20. Rake無法識別具有多個擴展名的規則
- 21. 「對準」:無法識別的擴展屬性
- 22. Xades4j - CRL中無法識別的關鍵擴展(s)
- 23. Ruby on Rails:爲什麼我的類擴展無法識別?
- 24. 類擴展 - 無法識別的二傳手
- 25. AutoMapper展開擴展方法
- 26. 方法引用的方法 - 識別爲未使用
- 27. 擴展方法擴展靜態類
- 28. GraphicsPath.IsClockWise()擴展方法
- 29. C#擴展方法
- 30. 擴展方法ConvertAll
類似:http://stackoverflow.com/questions/1138848/net-list-distinct – 2010-04-07 16:48:15