不能在 IronPython 中使用自定义扩展方法
本文关键字:自定义 扩展 方法 IronPython 不能 | 更新日期: 2023-09-27 18:35:06
我在C#类中定义了一些扩展方法,我可以将它们很好地导入到IronPython脚本中。但是,当我尝试调用这些方法之一("Find"方法)时:
cmd.SetSpending(galaxy.Mod.Technologies.Find("Propulsion"), 100);
我收到一个错误:"预期的谓词[技术],找到str"。
我不明白出了什么问题 - 扩展方法将 IEnumerable 作为其第一个参数("this"参数),这就是星系。Mod.Technologies是,第二个字符串,这就是我要传递的内容。我像这样导入它:
import FrEee;
import FrEee.Utility;
clr.ImportExtensions(FrEee.Utility.Extensions);
其中 FrEee.Utility.Extensions 是一个包含 CommonExtensions.cs 的命名空间,其中定义了 Find 方法。
我可以调用"stock"System.Linq扩展方法,例如Single:
techs = galaxy.Mod.Technologies;
tech = techs.Single(lambda t: t.Name == "Propulsion");
这完成了与我的 Find 方法完全相同的事情,但我真的希望能够使用自定义扩展方法。它们是在IronPython中根本不支持,还是由于某种原因仅支持采用谓词的扩展方法?
您似乎有名称冲突。 .Net有自己的.定义了 find() 扩展方法。将你的重命名为其他名称(如 FindName()),它应该可以工作。
这对
我有用
C# 库MyLibrary/Extensions.cs
using A = ExternalLib.ClassA;
namespace MyLibrary {
public static class Extensions {
public static string Id(this A a) {
return 1;
}
}
}
IronPython 代码
import clr
clr.AddReferenceToFileAndPath("C:''path''to''MyLibrary.dll")
from MyLibrary import Extensions as mle
a = A() # classA from somewhere ...
print("get Id %d" % mle.Id(a))
按预期返回 1。