有人请检查这段代码..问题是数组值?

时间:2013-11-27 09:46:04

标签: c# arrays

字符串值未转换为int。我正试图从文件中读取它

lol
1   3   10  100 30  60  UserId  
2   3   100 100 30  100 UserId 

我将它加载到构造函数

string[] line;

if (File.Exists(fn))
{
    try
    {
        line = File.ReadAllLines(fn);
        for (int i = 1; i < line.Length; i++)
        {
            if (line[i] != null)
            {
                string[] pty = line[i].Split('\t');                               
                int ID = Convert.ToInt32(pty[0]);
                ItemTypes types = (ItemTypes)int.Parse(pty[1]);
                int X = int.Parse(pty[2]);
                int Y = Convert.ToInt32(pty[3]);
                int Height = Convert.ToInt32(pty[4]);
                int Width = Convert.ToInt32(pty[5]);
                string text = pty[6].ToLower();

2 个答案:

答案 0 :(得分:1)

据我所见,您尝试将枚举的字符串表示形式解析为整数:

  

ItemTypes types = (ItemTypes)int.Parse(pty[1]);

根据您的代码pty[1]具有值ItemTypes.Label,不能将其解析为整数。这也不能解析为枚举。为了使代码有效,您需要将枚举值存储为整数 - 您需要使用相应的int值替换输入中的ItemTypes.Label

(int) ItemTypes.Label

或者,您可以使用Enum.Parse方法。您仍然需要修改输入以不包含枚举类型,以便ItemTypes.Label仅变为Label

ItemTypes types = (ItemTypes) Enum.Parse(typeof(ItemTypes), pty[1]);

答案 1 :(得分:1)

如果你做这样的事情然后在列表上的迭代器

,那就更好了
List<String> wordsList = new List<string>();
string[] pty = line[i].Split('\t');

foreach (string word in pty)
{
  wordsList.Add(word);
}

你没有做错,唯一的错误就是ItemTypes.Label无法像@Ivaylo Slavov所提到的那样被解析为Int32