Re: Re: .NET/LINK USER GUIDE Comment: Calling
- To: mathgroup at smc.vnet.net
- Subject: [mg105285] Re: [mg105193] Re: .NET/LINK USER GUIDE Comment: Calling
- From: Todd Gayley <tgayley at wolfram.com>
- Date: Wed, 25 Nov 2009 23:03:57 -0500 (EST)
- References: <he893j$q5j$1@smc.vnet.net>
Reagrs, Your solution is exactly correct, and you can give yourself some well-deserved congratulations for figuring it out. You can do arbitrarily complicated machinations with generics in .NET/Link already, but .NET/Link really needs some added syntax for making generics easier to use, as well as more documentation. One complication for your NETCallGenericStaticMethod function is that the GetMethod call fails if the static method has overloads. You can work around this by calling GetMethods[] and then iterating through the list to find the one you want. I give an example of this, as well as some more generics-related techniques, in a notebook I wrote a little while ago called "Using LINQ from Mathematica." It is of interest to anyone working with generics in .NET/Link, not necessarily using LINQ. I have sent this to you separately, and I'd be happy to send it to anyone else who is interested. Its content is being incorporated into the .NET/Link documentation for future versions of Mathematica. Todd Gayley Wolfram Research At 04:47 AM 11/24/2009, wollmich wrote: >On 21 Nov., 09:41, wollmich <wollm... at gmail.com> wrote: > > Hi, > > > > I've a problem to call a static generic C# method from Mathematica and > > I don't find any example on the web or in your user guide.http://www.wolf= >ram.com/learningcenter/tutorialcollection/NETLinkUserG... > > > > Calling a non static class (this works): > > Type1 = LoadNETType["DummyLib.Class1"]; > > Object1 = NETNew[Type1]; > > Object1@Method1[]; > > > > Calling a static method in a static class (this works): > > Type2 = LoadNETType["DummyLib.Class2"]; > > Class2`Method2[]; > > > > Calling a non static but generic class (this works): > > Type3 = LoadNETType["DummyLib.Class3`1[[DummyLib.Class1]]"]; > > Object3 = NETNew[Type3]; > > Object3@Method3[]; > > > > Calling a static generic method in a static class (THIS DOESN'T > > WORK!!!!) I've no idea how to call it??? > > The method could look like that in C#: > > C#-Code: > > namespace DummyLib > > { > > public static class Class4 > > { > > public static T Method4<T>() > > where T : new() > > { > > return new T(); > > } > > } > > > > } > > > > With NETTypeInfo the method is listet, but I don't no idea how to pass > > the type parameter? > > Type4 = LoadNETType["DummyLib.Class4"]; > > NETTypeInfo[Type4]; > > > > Can somebody please help me. Thanks. > > > > Regards Wollmich > >I've a solution which works: > >NETCallGenericStaticMethod[classtype_ method_, type_, arguments___] := > Module[{m1, m2, t1, t2}, > t1 = GetTypeObject[classtype]; > m1 = t1@GetMethod[method]; > t2 = GetTypeObject[type]; > m2 = m1@MakeGenericMethod[{t2}]; > Return[m2@Invoke[Null, arguments]]]; > >Any other idea? > >Reagrs Wollmich