【问题标题】:Can't use custom extension methods with IronPythonIronPython 无法使用自定义扩展方法
【发布时间】:2013-10-11 23:47:10
【问题描述】:

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

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

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

我不明白出了什么问题 - 扩展方法的第一个参数(“this”参数)是一个 IEnumerable,它是 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 的扩展方法?

【问题讨论】:

    标签: c# linq ironpython


    【解决方案1】:

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

    【讨论】:

    • 我不认为 .NET 有自己的 Find 扩展方法,因为我在 C# 代码中从未见过。不过我愿意试一试……
    • 呵呵,显然 List 确实有 Find 方法!
    猜你喜欢
    • 2014-10-12
    • 2012-09-10
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    相关资源
    最近更新 更多