2013-10-11 46 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

相关问题