1

我在 C# 类中定义了一些扩展方法,可以将它们很好地导入 IronPython 脚本。但是,当我尝试调用其中一种方法(“查找”方法)时:

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

我收到一个错误:“预期谓词 [Technology],找到 str”。

我不明白出了什么问题 - 扩展方法将一个 IEnumerable 作为其第一个参数(“this”参数),这就是galaxy.Mod.Technologies 是什么,第二个是一个字符串,这是我正在传递的我正在像这样导入它:

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

其中,FrEee.Utility.Extensions 是一个包含 CommonExtensions.cs 的命名空间,其中定义了 Find 方法。

我可以调用“库存” System.Linq 扩展方法,例如 Single 就好了:

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

这完成了与我的 Find 方法完全相同的事情,但我真的希望能够使用自定义扩展方法。IronPython 根本不支持它们,还是只是出于某种原因支持 Predicate 的扩展方法?

4

1 回答 1

0

看来您有名称冲突。.Net 定义了自己的 .Find() 扩展方法。将您的重命名为其他名称(例如 FindName()),它应该可以工作。

于 2013-10-12T09:43:57.360 回答