Hey,
On Sat, Jul 3, 2010 at 8:39 PM, Gábor Kozár <[email protected]> wrote:
> When I have a MethodReference or TypeReference representing a generic method
> call / object instance, calling Resolve() seems to eliminate the generic
> arguments, resulting in invalid references in the CIL code. Is this
> intentional?
Yes. Resolve returns the corresponding *Definition. There's currently
nothing builtin that does a Resolve + rebuilding of a type spec.
> The problem is that I need to call Resolve(), then manipulate the resulting
> definition object, and I also have to preserve (and manipulate) the generic
> arguments (if any).
> Any hints?
Just implement it on top of Resolve, something like:
public static TypeReference ResolvePreserve (this TypeReference self)
{
if (self.IsGenericInstance) {
var previous_instance = (GenericInstanceType) self;
var instance = new GenericInstanceType
(previous_instance.ElementType.ResolvePreserve ());
foreach (var argument in previous_instance.GenericArguments)
instance.GenericArguments.Add (argument.ResolvePreserve
());
}
if (self.IsArray) {
// ..
}
if (self.IsByReference) {
//
}
return self.Resolve ();
}
--
Jb Evain <[email protected]>
--
--
mono-cecil