关于泛型类型的IronPython重载决策

关于泛型类型的IronPython重载决策,第1张

概述我有一个带有重载静态方法的C#类,如下所示: // Added to the Simple class in Tutorial\Extend\csextend.cspublic static int Foo(IEnumerable<int> values){ return 1;}public static int Foo(IEnumerable<string> values){ 我有一个带有重载静态方法的C#类,如下所示:
// Added to the Simple class in Tutorial\Extend\csextend.cspublic static int Foo(IEnumerable<int> values){    return 1;}public static int Foo(IEnumerable<string> values){    return 2;}

当我尝试从IronPython 2.6中调用它们时出错.我正在传递一个包含字符串的python列表.

import clrclr.AddReferencetofile("csextend.dll")import SimpleSimple.Foo(["Alpha","bravo","charlIE"])
TypeError: Multiple targets Could match: Foo(IEnumerable[str]),Foo(IEnumerable[int])

我的第一个问题是为什么这不起作用?似乎重载解决方案应该对此起作用.这是IronPython中的错误吗?什么是最干净的解决方法.我可以重命名例程,这样它们就不会相互重载,但后来我让铁心怪怪改变了C#类的设计.

是否有一种干净的方法可以给python一个线索,即列表完全由一种类型组成,它应该选择一个特定的重载?

与this question有关

解决方法 IronPython并没有真正的函数重载,只有一个函数具有所有功能.通常IronPython会自动执行此 *** 作,但泛型类型会使事情变得复杂.要消除使用哪个重载的歧义,使用Overloads字典获取函数,将签名中的类型作为键传递. (我在撰写本文时使用的是IronPython 2.7,因此我不知道版本2.6和2.7之间是否存在差异)
import System.Collections.Generic.IEnumerable as IEnumerableSimple.Foo.Overloads[IEnumerable[str]](["Alpha","charlIE"])

如果函数中有更多参数,则将类型作为元组传递.

#public static int Foo(IEnumerable<string> values,string otherParam)#{#    return 3;#}Simple.Foo.Overloads[IEnumerable[str],str](["Alpha","charlIE"],"x")

等等

总结

以上是内存溢出为你收集整理的关于泛型类型的IronPython重载决策全部内容,希望文章能够帮你解决关于泛型类型的IronPython重载决策所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1207393.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存