未处理的类型异常(System.TypeInitializationException)

时间:2014-06-17 23:29:05

标签: c# exception visual-studio-2013 streamreader

正如标题所说,Visual Studio在执行程序时抛出异常。 确切的错误:

An unhandled exception of type 'System.TypeInitializationException' occurred in mscorlib.dll

由于我是使用Visual Studio和C#的新手,我无法辨别出问题所在。我做谷歌,但我发现的信息都没有帮助恢复我的例外程序。

程序代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;



namespace Game {
    public struct entity {
        int XP,
            HP,
            mana,
            luck,
            strength,
            defense;
        float modStrength,
            modDefense;
        string stance;
    }

    public class Game {
        private  entity enemy;
        private static Dictionary<string, int> playerData =
            new Dictionary<string, int>();
         public static string[] entityPool =
            new StreamReader(Properties.Resources.Entities).ToString().Split('?');

        static void Main (string[] args) {
            instancePlayer();
            Console.ReadKey();
        }   
        private static void instancePlayer () {
            string[] playerDataDummy = entityPool[0].Trim().Split(';');

            foreach (string s in playerDataDummy) {
                string[] indivArr = s.Split(' ');
                playerData.Add(indivArr[0], Convert.ToInt16(indivArr[1]));
            }

            foreach (KeyValuePair<string, int> s in playerData) {
                Console.WriteLine("[{0}] {1}", s.Key, s.Value);
            }
        }

        private void instanceEnemy () {

        }
    }
}

我已经能够将问题缩小到这条线,但是......

public static string[] entityPool = new StreamReader(Properties.Resources.Entities).ToString().Split('?');

这和我一样被发现了;删除它的初始化及其所有引用会使问题无效。但是,我确实需要它。

3 个答案:

答案 0 :(得分:0)

看看streamreader class on MSDN。它有几个构造函数和一个从文本文件中读取的简单示例。我不确定你在Properties.Resources.Entities(我假设的文件路径)中有什么。假设这是一个有效的文件路径或流,并且构造函数不会抛出错误,那么您正在创建流读取器,然后调用.ToString(),它为您提供StreamReader对象的字符串表示形式,而不是文件的内容或流。这可能不是你所期望的。 MSDN页面上的示例应该可以帮助您使用StreamReader类。

答案 1 :(得分:0)

这条线错了。

public static string[] entityPool = new StreamReader(Properties.Resources.Entities).ToString().Split('?');

您可能想要的是阅读流的所有内容。这样的事情。

StreamReader sr = new StreamReader(Properties.Resources.Entities);
string[] entityPool = sr.ReadToEnd().Split('?');

最好将此代码放在带有try-catch而不是初始化器的构造函数中。

答案 2 :(得分:0)

看来,不需要StreamReader来访问文件的内容。

string[] entityPool = Properties.Resources.Entities.split('?');按照我之前的预期工作。

我很欣赏回应,All。