[Mono-list] Different value of IsValueType for Void types in MethodDefinition and Imported type.

d_k mail4dk at gmail.com
Sun Nov 2 20:12:38 UTC 2014


Hello,

I'm using the NuGet package of Mono.Cecil [0], it looks like version 0.9.5,
on Windows 7 .NET 4.5 and VS 2013 and I experience the same behavior on mono
3.10 on slackware.

I'm trying to determine if the return type of a method is 'void'.

My problem is that I get a different value for IsValueType property of a
TypeReference obtained from a MethodDefinition and an imported type and as
a result the following comparison is false:

methodDefinition.ReturnType == methodDefinition.Module.Import(typeof(void))

If I compile a file with this code:

using System;

namespace Sample
{
    public class Class1
    {
        public void Method1() { }
    }
}

and then read it using this code:

AssemblyDefinition assembly = AssemblyDefinition.ReadAssembly("Sample.dll");
TypeDefinition typeDefinition = assembly.MainModule.GetTypes().First(_ =>
_.Name == "Class1");
MethodDefinition methodDefinition = typeDefinition.Methods.First(_ =>
_.Name == "Method1");
bool equalVoidTypes = methodDefinition.ReturnType ==
methodDefinition.Module.Import(typeof(void));
bool returnTypeIsValueType = methodDefinition.ReturnType.IsValueType;
bool importedVoidTypeIsValueType =
methodDefinition.Module.Import(typeof(void)).IsValueType;

The value of returnTypeIsValueType is false and the value of
importedVoidTypeIsValueType is true and I suspect this is the reason the
equal operation fails and equalVoidTypes is false.

My question is what is the correct way to use types to test a method for a
void return type other than testing the name to be "System.Void"?

Am I doing something wrong?
Is there another way this sort of thing should be done?

[0] https://www.nuget.org/packages/Mono.Cecil/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ximian.com/pipermail/mono-list/attachments/20141102/eaeca6d5/attachment.html>


More information about the Mono-list mailing list