我使用Python.NET来加载C#程序集以从Python调用C#代码。这工作得干净利索,但是我有一个问题,调用看起来像这样的方法:在Python中使用Python.NET创建C#可空的Int32(使用Python.NET)以可选的int参数调用C#方法
内Our.Namespace.Proj.MyRepo的方法:
OutputObject GetData(string user, int anID, int? anOptionalID= null)
我可以拨打电话进行的情况下方法可选的第三个参数是存在的,但不知道要传递第三个参数以匹配空情况。
import clr
clr.AddReference("Our.Namespace.Proj")
import System
from Our.Namespace.Proj import MyRepo
_repo = MyRepo()
_repo.GetData('me', System.Int32(1), System.Int32(2)) # works!
_repo.GetData('me', System.Int32(1)) # fails! TypeError: No method matches given arguments
_repo.GetData('me', System.Int32(1), None) # fails! TypeError: No method matches given arguments
IPython的笔记本电脑表示最后的参数应该是类型:
System.Nullable`1[System.Int32]
只是不知道如何创建一个对象,将空的情况下匹配。
关于如何创建一个C#识别的空对象的任何建议?我认为传递本地Python无效,但它不。
我不知道Python.NET,但似乎,当你通过无它,它可能只搜索米具有参考类型参数的方法。你至少可以在没有最后一个参数的情况下尝试一个超载(并且可能会有另一个超载,最后一个参数是'object'以允许传递None(如果有效的话),然后调用第一个方法并使用最后一个参数'as int?')。 – IllidanS4 2014-11-07 17:04:38
结束重构C#端以重载方法(一个没有第三个参数,另一个没有第三个参数)。 Python.NET处理这个罚款。缺点是我必须有条件地根据最后一个参数的存在来调用两种方法之一。我会尝试建议让C#端的第三个重载案例的最后一个参数为'object',以允许传递None。谢谢! – skulz00 2014-11-07 18:01:43