【问题标题】:Fix "System.Collections.Generic.List`1[Event_Manager.Form3+MyClass]" in C# [duplicate]修复 C# 中的“System.Collections.Generic.List`1[Event_Manager.Form3+MyClass]”[重复]
【发布时间】:2019-07-28 03:49:13
【问题描述】:

我正在尝试对保存在文本文档中的日期进行排序,我已使用列表完成此操作。当我尝试将详细信息保存回文本文档时,在文档中我看到的只是保存的是

System.Collections.Generic.List`1[Event_Manager.Form3+MyClass]

下面的这段代码是用一个按钮执行的,据说可以对日期进行排序,但我什至看不到这段代码是否真的对日期进行了排序,因为我不断得到

System.Collections.Generic.List`1[Event_Manager.Form3+MyClass]

保存而不是原始数据。

我尝试使用 .ToString() 来防止这种情况发生,但它仍然显示保存到文档中的保存输出。


            // Read the file and display it line by line.
            StreamReader file = new StreamReader("Events.txt");

            List<MyClass> myClassList = new List<MyClass>();

            while ((line = file.ReadLine()) != null)
            {
                string[] split = line.Split(',');

                MyClass myclass = new MyClass();

                myclass.date = DateTime.Parse(split[2]);

                myClassList.Add(myclass);
            }

            file.Close();

            // Sort the list by date
            List<MyClass> myClassListSorted = myClassList.OrderByDescending(x => x.date).ToList();

            using (StreamWriter sr = new StreamWriter(@"Events.txt"))
            {
                foreach (var item in myClassList)
                {
                    sr.WriteLine(myClassListSorted.ToString());

                }
                sr.Close();
            }

我应该能够看到我最初保存在文本文档中的实际数据,但是带有排序的日期,而不是只有System.Collections.Generic.List`1[Event_Manager.Form3+MyClass]

【问题讨论】:

  • 如标记的重复项中所述,当您看到一个类型的名称时,您看到的是ToString() 的默认实现。当这是一个列表时,您真正想要的几乎总是以某种方式将列表的内容表示为文本,而不是列表对象本身。请参阅标记的副本以了解实现此目的的各种技术。
  • 彼得——这只是问题的一部分。阅读我对下半年的评论。

标签: c# winforms


【解决方案1】:

您正在遍历未排序的列表,然后尝试编写已排序的列表对象(而不是已排序列表中的项目)。接近尾声时,您应该这样做:

foreach (var item in myClassListSorted)
{
     sr.WriteLine(item.date.ToString());
}

根据需要格式化日期属性。或者您可以将原始行保存在每个 MyClass 中,然后在排序后将该行写入文件。

while ((line = file.ReadLine()) != null)
{
            string[] split = line.Split(',');
            MyClass myclass = new MyClass();
            myclass.date = DateTime.Parse(split[2]);
            MyClass.originalLine = line; // <---------
            myClassList.Add(myclass);
}

然后在循环的后面:

     sr.WriteLine(item.originalLine);

这样文本文件中的数据是相同的,只是现在按排序顺序。

【讨论】:

  • 非常感谢,我努力了很久,你救了我:)
  • 没问题。别忘了点赞! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-22
  • 1970-01-01
  • 2015-06-03
相关资源
最近更新 更多