[Mono-dev] Detect List<> from C code
robertj at gmx.net
Sat Jun 20 19:24:29 EDT 2009
Joachim Ante wrote:
> Olexandr pointed out that the class name is always "List`1". So it
> seems that comparing the class name also checking against the mono
> image of the class against mscorlib is a safe way of checking if it
> is System.Generic.Container.List.
mono_class_get_name () of *any* List<T>, including List<>
is indeed "System.Collections.Generic.List`1", but I won't
rely on this string because it may change in the future.
For example, a better name for List<int> would be
while "System.Collections.Generic.List`1" should be
reserved for the generic type definition (List<T>).
I don't know if the current behavior is bug, oversight
or a feature.
> Now i have the generic type from the field in a MonoClass* pointer,
> how do I correctly create an instance from the class?
If the only thing you have is a List<T>, you cannot create
a class from it because you need to know the T.
But if your field's class is a *closed* generic type like
List<int>, then mono_object_new () will work just fine.
> mono_object_new and mono_runtime_object_init doesn't seem to work.
> The values don't seem to be correctly initialized when i use those
> two functions on the MonoClass extracted from the MonoClassField.
> Joachim Ante
>> Joachim Ante wrote:
>>> Whats the best way of checking if a MonoField* refers to a
>>> System.Generic.Container.List<>? The check needs to be high
>> The public API does not expose the necessary functions to
>> achieve this, but you could use a managed helper:
>> public static bool IsGenericTypeOf (Type genericInstance, Type
>> if (!genericInstance.IsGenericType)
>> return false;
>> if (!genericDefinition.IsGenericTypeDefinition)
>> return false;
>> return genericInstance.GetGenericTypeDefinition() ==
>> When you invoke this method, the type arguments are actually
>> MonoReflectionType*s which you can get from a class using
>> this code:
>> mono_type_get_object(mono_class_get_type (class))
>> Mono-devel-list mailing list
>> Mono-devel-list at lists.ximian.com
More information about the Mono-devel-list