首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# MissingMethodException:找不到“”System.Int32“”类型的构造函数

C# MissingMethodException:找不到“”System.Int32“”类型的构造函数
EN

Stack Overflow用户
提问于 2016-02-24 12:00:50
回答 1查看 1.3K关注 0票数 0

我试图使用YAXLib来处理XML,但是每当我试图序列化一个带有整型、双精度或浮点型字段的类时,我就会崩溃。YAXLib尝试调用

代码语言:javascript
复制
DefaultValue = MemberType.InvokeMember(string.Empty, BindingFlags.CreateInstance, null, null, new object[0]);

其中MemberTypeSystem.Int32 Type对象。

当然,Int32没有要调用的构造函数。首先,我试图理解它是如何工作的。这是在新版本的mono/C#中引入的吗?

这是在Unity3d中,使用Mono,.NET 2.0.5

代码语言:javascript
复制
MissingMethodException: Constructor on type 'System.Int32' not found.
System.MonoType.InvokeMember (System.String name, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object target, System.Object[] args, System.Reflection.ParameterModifier[] modifiers, System.Globalization.CultureInfo culture, System.String[] namedParameters) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System/MonoType.cs:398)
System.Type.InvokeMember (System.String name, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object target, System.Object[] args) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System/Type.cs:1149)
YAXLib.MemberWrapper.InitDefaultValue () (at Assets/Vendor/YAXLib/MemberWrapper.cs:691)
YAXLib.MemberWrapper.InitInstance () (at Assets/Vendor/YAXLib/MemberWrapper.cs:682)
YAXLib.MemberWrapper..ctor (System.Reflection.MemberInfo memberInfo, YAXLib.YAXSerializer callerSerializer) (at Assets/Vendor/YAXLib/MemberWrapper.cs:122)
YAXLib.YAXSerializer+<GetFieldsToBeSerialized>c__Iterator1.MoveNext () (at Assets/Vendor/YAXLib/YAXSerializer.cs:2815)
YAXLib.YAXSerializer.SerializeBase (System.Object obj, System.Xml.Linq.XName className) (at Assets/Vendor/YAXLib/YAXSerializer.cs:722)
YAXLib.YAXSerializer.SerializeBase (System.Object obj) (at Assets/Vendor/YAXLib/YAXSerializer.cs:609)
YAXLib.YAXSerializer.SerializeXDocument (System.Object obj) (at Assets/Vendor/YAXLib/YAXSerializer.cs:539)
YAXLib.YAXSerializer.Serialize (System.Object obj) (at Assets/Vendor/YAXLib/YAXSerializer.cs:349)
DataHandler..ctor () (at Assets/DataWrangling/DataHandler.cs:36)
YAXTestHarness.Start () (at Assets/DataWrangling/YAXTestHarness.cs:8)
EN

回答 1

Stack Overflow用户

发布于 2016-02-24 12:14:45

也许你想要一个最新版本的YAX什么的?

我刚在谷歌上搜索了YAXLib MemberWrapper找到了https://github.com/sinairv/YAXLib/blob/master/YAXLib/MemberWrapper.cs

您在如下实现中有异常的方法:

代码语言:javascript
复制
    private void InitDefaultValue()
    {
        if(MemberType.IsValueType)
            DefaultValue = MemberType.InvokeMember(string.Empty, BindingFlags.CreateInstance, null, null, new object[0]);
        else
            DefaultValue = null;
    }

所以我稍微修改了一下,并从一个控制台应用程序中调用了它,它可以很好地工作,返回0。

代码语言:javascript
复制
    private static object InitDefaultValue(Type MemberType)
    {
        if (MemberType.IsValueType)
            return MemberType.InvokeMember(string.Empty, BindingFlags.CreateInstance, null, null, new object[0]);
        else
            return null;
    }

    static void Main(string[] args)
    {
        Console.WriteLine(InitDefaultValue(typeof(System.Int32)));
    }

这让我相信你正在使用的YAXLib和mono版本之间有一些不兼容,因为它翻译为“通过调用默认构造函数创建实例”,应该也可以在mono下工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35593003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档