Re: NETLink Q: How Create Array of specified Type?
- To: mathgroup at smc.vnet.net
- Subject: [mg47662] Re: NETLink Q: How Create Array of specified Type?
- From: Todd Gayley <tgayley at wolfram.com>
- Date: Wed, 21 Apr 2004 05:23:00 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
At 07:57 PM 4/19/2004, ToolmakerSteve wrote: >Todd, > >NetLink version 1.0 automatically creates arrays of primitive types: > >MakeNETObject[ {11, 22, 33} ] >=> NETObject[System.Int32[]] > >but I haven't found a way to specify the type of an array, >so I can fill that array with values. > >Need to do this, so that I can invoke some advanced methods in CodeDOM, >with parameters of arrays of particular CodeDOM types. > >Ironically, I couldn't use Reflection on class Array to work around this, >because to locate the CreateInstance method I needed an array of Types. >A "circular" difficulty! > >I can do this: >MakeNETObject[ {GetTypeObject[ LoadNETType[ "System.Type" ] ], > GetTypeObject[ LoadNETType[ "System.Int32" ] ]} ] > >=> NETObject[System.Object[]] > >Now how do I turn this into a > >NETObject[System.Type[]] Steve, MakeNETObject allows you to specify the type of the resulting .NET object by supplying a type specification as the second argument. Here is an example for your integer array: In[1]:= MakeNETObject[{11, 22, 33}, "System.Byte[]"] (* default is Int32[], but we want Byte[] *) Out[1]= <<NETObject[System.Byte[]]>> Here is how it looks for your Type array: In[2]:= MakeNETObject[ {GetTypeObject[ LoadNETType[ "System.Type" ] ], GetTypeObject[ LoadNETType[ "System.Int32" ] ]} , "System.Type[]"] Out[2]= <<NETObject[System.Type[]]>> Just for the record, you can also do this manually (although MakeNETObject is specifically designed to relieve programmers of this tedium): In[3]:= arr = MakeNETObject["System.Type[]", 2]; In[4]:= arr@SetValue[GetTypeObject[ LoadNETType["System.Type"], 0]; In[5]:= arr@SetValue[GetTypeObject[ LoadNETType["System.Int32"], 1]; Todd Gayley Wolfram Research