【问题标题】:c# lists not storing values after using int.TryParsec# 在使用 int.TryParse 后列出不存储值
【发布时间】:2014-11-07 02:02:37
【问题描述】:

我有以下代码读取文本文件并在其中搜索整数。我正在使用“int.TryParse”来执行此操作,但它在运行后并未将整数值存储在列表中,只是想知道您能否告诉我这段代码有什么问题。谢谢。

 namespace AccessErrorFile
  {
    class Program
    {
        static void Main(string[] args)
        {
            List<int> plans = new List<int>();
            List<int> events = new List<int>();

            using (var reader = new StreamReader(@"D:\Temp\AccessEmail.txt"))

                try
                {
                    string line;
                    while ((line = reader.ReadLine()) != null)
                    {
                        //split the line
                        string[] parts = line.Split(new[] { "Event" },      StringSplitOptions.None);

                        //get valid integers
                        plans.Add(GetInt(parts[0].Split(' ', '\'')));
                        events.Add(GetInt(parts[1].Split(' ', '\'')));                    
                   }
                }
                catch (System.Exception ex)
                {
                    Console.WriteLine("Error" + ex.Message);
                }

               //print the elements in the lists
               foreach (int x in plans)
               {
                   Console.WriteLine(x);
               }

               foreach (int y in events)
               {
                   Console.WriteLine(y);
               }

               //print the number of elements in the lists
               Console.WriteLine(plans.Count);
               Console.WriteLine(events.Count);
               Console.ReadLine();
        }    
        public static int GetInt(string[] a)
        {
            int i = 0;
            foreach (string s in a)
            int.TryParse(s, out i);    
            return i;
        }         
    }
}

【问题讨论】:

  • 您是否使用调试器来检查您尝试解析的值类型?如果您甚至不告诉我们它试图解析什么,我们怎么可能告诉您为什么 TryParse 会失败?
  • 使用Debugger。它将帮助您了解正在发生的事情
  • 嗨,tnw,我在文本文件中解析这样的行:“以前的错误是针对计划 ID '1111111' 事件 ID '33234042'”

标签: c#


【解决方案1】:

你的问题是

  public static int GetInt(string[] a)
    {
        int i = 0;
        foreach (string s in a) //HERE
            int.TryParse(s, out i); //AND HERE 

        return i;
    }   

你在循环中解析,所以return i 语句基本上返回最后一个 s 的迭代,它很可能不是一个数字,所以i=0

如果要将字符串中的所有数字添加到整数数组中,可以执行以下操作:

IEnumerable<int> GetNumbersFromList(string[] s) {

    foreach(var str in s) {
        int val;        
        if(int.TryParse(str, out val)) 
            yield return val;
    }
}

之后

  plans.AddRange(GetNumbersFromList(parts));

只是一个基本的想法,自然而然地,你必须让它适应你的需求。

【讨论】:

  • 嗨 Tigran,解决方案是什么,我认为它需要像这样循环,因为该行是这种格式:“以前的错误是针对计划 ID '1111111' 事件 ID '33234042' "
  • @John:您创建了一个字符串数组并将其提供给 this 函数。它在迭代期间翻转字符串数组并在数组中生成可用的整数。
猜你喜欢
  • 2018-01-15
  • 1970-01-01
  • 2015-03-07
  • 2018-02-26
  • 1970-01-01
  • 1970-01-01
  • 2020-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多