[IronPython] CLR class constructors and arrays

Eric Rochester erochest at gmail.com
Mon Jul 30 23:33:52 CEST 2007


Thanks, Michael, that will work.

It seems blindingly obvious now, but I hadn't even considered it, since I
generally try to pass CLR types to CLR methods.

Sheepishly,
Eric

On 7/30/07, Michael Foord <fuzzyman at voidspace.org.uk> wrote:
>
> Hello Eric,
>
> Interestingly it works with:
> pc = ParamCall(('a', 'b', 'c'))
>
> passing a tuple instead of an array.
>
> Still looks like a bug.
>
> Michael
> http://www.ironpython.info/
>
> Eric Rochester wrote:
> > Hi,
> >
> > I've been using IronPython for a few months now, and I'm really
> > enjoying it. Thanks for all the hard work that's gone into it.
> >
> > I recently ran across an issue, and I wondered if anyone else has seen
> > it. I think it's probably a bug, but I couldn't find a bug report,
> > either.
> >
> > Basically, if there is a CLR class that takes an array as its only
> > constructor argument, IronPython always tries to call it using params.
> > For example, if I compile this to ParamCall.dll:
> >
> >     // ParamCall.cs
> >
> >     using System;
> >
> >     namespace ParamCall
> >     {
> >         public class ParamCall
> >         {
> >             private string[] args;
> >
> >             public ParamCall(string[] args)
> >             {
> >                 this.args = args;
> >             }
> >
> >             public string Joined()
> >             {
> >                 return String.Join(",", args);
> >             }
> >         }
> >     }
> >
> >
> > And I call it using this script:
> >
> >     # paramcall.py
> >
> >     import clr
> >     clr.AddReference('ParamCall')
> >
> >     from ParamCall import ParamCall
> >     from System import Array
> >
> >     args = Array[str]( ['a', 'b', 'c'] )
> >     print 'args =', args
> >
> >     print 'creating ParamCall object:'
> >     pc = ParamCall(args)
> >     print 'pc.Joined() =>', pc.Joined()
> >
> >     print
> >
> >
> > I get these results.
> >
> >     C:\home\eric\src\ase\Lse.Net>IronPython\ipy paramcall.py
> >     args = System.String[]('a', 'b', 'c')
> >     creating ParamCall object:
> >     Traceback (most recent call last):
> >       File C:\home\eric\src\ase\Lse.Net\paramcall.py, line 7, in
> >     Initialize
> >       File , line 0, in __import__##4
> >       File C:\home\eric\src\ase\Lse.Net\ParamCall.py, line 15, in
> >     Initialize
> >       File , line 0, in NonDefaultNew##54
> >     TypeError: ParamCall() takes exactly 1 argument (3 given)
> >
> >
> > I have also tried wrapping the arguments in a tuple and calling it
> > like ParamCall( *(args,) ), but the results are the same.
> >
> > If anyone has any suggestions for work-arounds or clues as to what I'm
> > doing wrong, I'd be glad to hear them.
> >
> > Thanks,
> >
> > --
> > Eric Rochester
> >
> > ------------------------------------------------------------------------
> >
> > _______________________________________________
> > Users mailing list
> > Users at lists.ironpython.com
> > http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
> >
>
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>



-- 
Eric Rochester
http://writingcoding.blogspot.com/
http://www.linkedin.com/in/erochester
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ironpython-users/attachments/20070730/fc4a42a3/attachment.html>


More information about the Ironpython-users mailing list