0

当我尝试调用以下命令时,我在 C# 中收到 System.TypeInitializationException:

List<BuyShopItem> buyShopItemList = new List<BuyShopItem>(0);

BuyShopItem位于外部程序集中,包含以下内容:

namespace GameProtocol
{
    public struct BuyShopItem
    {
        public int ShopItemID;
        public int Amount;
        public int GoldPrice;
        public int SilverPrice;
        public int CharacterPointPrice;
        public int ResearchPointPrice;
    }
}

这可能是因为外部组件,对吧?

不幸的是,我无法更改它,因为我需要BuyShopItem再次将其传递给另一个外部组件。

关于程序集的一些信息:它来自 Unity 游戏,.NET 3.5(根据 DotPeek msil, .Net Framework v3.5:)

我在 SharpDevelop 和 Visual Studio 2017 中都遇到了这个问题,所以它可能与 IDE 无关。结果peverify

Microsoft (R) .NET Framework PE Verifier. Version  4.0.30319.0
Copyright (c) Microsoft Corporation. Alle Rechte vorbehalten.

[MD]: Error: Field has a duplicate, token=0x040059d7. [Token:0x040059CF]
[MD]: Error: Field has a duplicate, token=0x040059cf. [Token:0x040059D7]
[MD]: Error: Field has a duplicate, token=0x0400a48b. [Token:0x0400A478]
[MD]: Error: Field has a duplicate, token=0x0400a478. [Token:0x0400A48B]
4 Fehler wird/werden überprüft Assembly-CSharp.dll

如果您有任何提示,请告诉我。我会尽快尝试。

这是 Visual Studio 2017 中异常的屏幕截图: https ://i.imgur.com/WHCbWTM.png

更新:我刚刚尝试了以下:Console.WriteLine(typeof(BuyShopItem));,发生了同样的错误。为什么无法获取类型?

4

1 回答 1

0

创建一个长度为零的结构列表是可以的。

也可以创建在不同程序集中定义的某种类型的列表 - 但请检查以确保可以在运行时找到必要的 DLL。

构造结构的实例通常是相当安全的——但请检查是否有自定义构造函数抛出异常。

还要仔细检查 BuyShowItem 结构是否指定了调用其他代码的任何静态字段,这反过来可能会失败。这通常是 TypeInitializationException 的根本原因。

请参阅:https ://msdn.microsoft.com/en-us/library/system.typeinitializationexception(v=vs.110).aspx

于 2018-04-02T07:47:10.443 回答