【问题标题】:Adding List Data to a Text File将列表数据添加到文本文件
【发布时间】:2015-04-30 18:30:08
【问题描述】:

我正在尝试将 C# 代码中的数据列表保存到文本文件中。它会在foreach 处引发错误,指出无法将列表转换为字符串。有什么想法我哪里出错了吗?

我只能在 .Net Framework 3.5 上运行应用程序

IList<FolderDetails> ListToCheck;

 using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\LogFile.txt"))
 {
     foreach (string line in ListToCheck)
     {                       
         file.WriteLine(line);                        
     }
}
public class FolderDetails
{
    public string PropertyGroupName { get; set; }
    public string ProjFiles { get; set; }
}

【问题讨论】:

  • 请提供问题的完整代码。
  • 您需要包含complete example
  • 抱歉它的类型是 ListToCheck 而不是 folderListToCheck。
  • ListToCheck 的每个元素都是FolderDetails 而不是string。这是个问题。
  • FolderDetails 是什么类型的对象?

标签: c# list foreach notepad


【解决方案1】:

检查这段代码:

IList<FolderDetails> ListToCheck;

using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\LogFile.txt"))
{
    foreach (string line in ListToCheck)

你说ListToCheck是一个FolderDetail类型的对象列表,但是在

foreach (string line in ListToCheck)

您尝试断言类型是字符串。

试试类似的东西

foreach (FolderDetail line in ListToCheck)
{
    file.WriteLine(line.SomeAppropriatePropertyOfFolderDetail);

【讨论】:

    【解决方案2】:

    以这种方式重做...

    为你的类添加一个 ToString() 覆盖:

    private class FolderDetails
    {
        public string PropertyGroupName { get; set; }
        public string ProjFiles { get; set; }
        public override string ToString()
        {
            return string.Format("{0}:{1}", this.PropertyGroupName, this.ProjFiles);
        }
    }
    

    然后输出如下:

    List<FolderDetails> foldersListToCheck = GetFolderDetails();
    File.WriteAllLines(@"C:\LogFile.txt", foldersListToCheck.Select(f => f.ToString()));
    

    【讨论】:

    • 那不会编译,是吗? WriteAllLines 方法需要一个字符串集合。拥有 ToString 方法不会将对象变成字符串。
    • AllLines 是 .Net 框架 3.5+ 的一部分。我的情况是我必须在仅支持 3.5 的 sharepoint 2010 应用程序中使用此代码。
    • OP 的原始 StreamWriter.WriteLine 有一个接受 Object 的重载,因此重载会自动调用 ToString() 以获取适当的表示。
    【解决方案3】:
    IList<FolderDetails> ListToCheck;
    
     using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\LogFile.txt"))
     {
         foreach (string line in ListToCheck)
         {                       
             file.WriteLine(line);                        
         }
    }
    

    在上面的代码中,ListToCheck 不是字符串列表,也没有初始化

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-29
      • 1970-01-01
      • 1970-01-01
      • 2013-01-26
      • 2012-02-17
      • 2016-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多