2013-10-11 64 views
1

我有一些我在C#類中定義的擴展方法,我可以很好地將它導入到IronPython腳本中。然而,當我嘗試調用這些方法之一(「查找」方法):不能在IronPython中使用自定義擴展方法

cmd.SetSpending(galaxy.Mod.Technologies.Find("Propulsion"), 100); 

我得到一個錯誤:「預計謂詞[科技],發現海峽」。

我不明白什麼是錯的 - 擴展方法需要一個IEnumerable作爲它的第一個參數(「this」參數),這是galaxy.Mod.Technologies是什麼,並且作爲它的第二個字符串,這是什麼我傳遞我進口它像這樣:

import FrEee; 
import FrEee.Utility; 
clr.ImportExtensions(FrEee.Utility.Extensions); 

其中FrEee.Utility.Extensions是包含CommonExtensions.cs一個命名空間中,它被定義查找方法。

我可以稱之爲「股票」 System.Linq的擴展方法,如單就好:

techs = galaxy.Mod.Technologies; 
tech = techs.Single(lambda t: t.Name == "Propulsion"); 

這樣可以完成同樣的事情作爲我的查找方法,但我真的希望能夠使用自定義擴展方法。它們是否僅僅在IronPython中不受支持,或者只是由於某種原因而支持Predicate的擴展方法?

回答

0

看來你有名字衝突。 .Net有它自己的.Find()擴展方法定義。重命名你的其他東西(如FindName()),它應該工作。

+0

我不認爲.NET有自己的Find擴展方法,因爲我從來沒有在我的C#代碼中看到過。我很樂意嘗試,雖然... – ekolis

+0

嗯,顯然列表確實有一個查找方法! – ekolis

相關問題