[Python.NET] issue disambiguating overloaded method that takes an array

Barton barton at BCDesignsWell.com
Tue May 17 09:38:21 CEST 2011


def TestCharArray():
     from System import Array
     charArrType = Array[Char]
     ##arrType = charArrType('hello')
     ##for char in arrType:
     ##    print char,
     ## Also works on instances of the type! ##
     strCharArr = s.__overloads__[charArrType]
     s = strCharArr(list('hello'))
     print s

On 5/16/2011 6:29 PM, Adrian Perez wrote:
> Hello everyone,
>
> This is probably a total n00b question, but I've been using pythonnet in our toolchain to communicate with a private c# assembly for months now without ever running into a problem I couldn't eventually figure out.  This one has me totally stumped, and I'm hoping something obvious will jump out at experienced eyes.
>
> (I did a find/replace for secrecy, besides silly names these are the raw results I get back)
>
> A C# class exposes a method 'WriteByte' that has 5 overloads (note that only one of them takes 2 arguments):
>
>>>> accessor= MyCompany.SomeNamespace.SomeTypeArrayAccessor
>>>> accessor.WriteByte.__overloads__
> Boolean WriteByte(MyCompany.SomeNamespace.SomeType, Byte[])
> Boolean WriteByte(MyCompany.SomeNamespace.SomeType, Byte[], Int32 ByRef)
> Boolean WriteByte(MyCompany.SomeNamespace.SomeType, System.Collections.Generic.IEnumerable`1[System.Byte], Int32 ByRef)
> Boolean WriteByte(MyCompany.SomeNamespace.SomeType, Int32, System.Collections.Generic.IEnumerable`1[System.Byte], Int32 ByRef)
> Boolean WriteByte(MyCompany.SomeNamespace.SomeType, Int32, Byte[], Int32 ByRef)
>
> I attempt to disambiguate by selecting the 2-arg method I want by type:
>
>>>> desired_method= accessor.WriteByte.__overloads__[MyCompany.SomeNamespace.SomeType, System.Array[System.Byte]]
> The problem may be right here - if I print out desired_method.__doc__ I get the same 5 methods listed above.  Anyway, then I compute my arguments, and can verify they have the types I expect (If it matters, arg_b is created by a call to System.IO.BinaryReader.ReadBytes()):
>
>>>> arg_a= ...
>>>> arg_b= ...
>>>> type(arg_a)
> <class 'MyCompany.SomeNamespace.SomeType'>
>>>> type(arg_b)
> <class 'System.Byte[]'>
>
> However, when I try to call the disambiguated method with the correct args, I get no love:
>
>>>> result= desired_method(arg_a, arg_b)
> Traceback (most recent call last):
>    File "<string>", line 1, in<fragment>
> TypeError: No method matches given arguments
>
> Does anyone see the obvious thing I'm doing wrong?  Disambiguating can be a pain but I've done it before for other methods and have never had such an impossible time getting the correct method called.
>
> Thanks,
>
> Adrian Perez
> _________________________________________________
> Python.NET mailing list - PythonDotNet at python.org
> http://mail.python.org/mailman/listinfo/pythondotnet
>


More information about the PythonDotNet mailing list