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