【问题标题】:Writing custom list using TextWriter使用 TextWriter 编写自定义列表
【发布时间】:2016-06-17 19:59:00
【问题描述】:

我有一个班级Author.cs

public class Author  
{  
   public Author()  
   { }  

   public int AuthorID;  
   public string AuthorName;  
   public List<Papers> Papers;  

   // ... rest of the methods...  
}  

和另一个班级Paper.cs 为:

public class Paper  
{  
   public Paper()
   { }

   public int PaperID { get; set; }
   public List<int> CoAuthors { get; set; }
   public int VenueID { get; set; }
   public int PaperCategory { get; set; }
   public int Year { get; set; }  
}  

我尝试在文本文件中打印为:

TextWriter twObjClus = File.CreateText(Path.Combine(path, objClusterFilename));  
foreach (CurrentCluster curCluster in curClusters)
{
   twObjClus.WriteLine(@"ClusterID: {0}, ClusterSize: {1} \n",  
                         curCluster.GetClusterID(), curCluster.GetClusterSize()  
                      );
   twObjClus.WriteLine("--------------------------------------------------------------");  

   foreach (EvoObject eEvoObject in curCluster.GetClusterObjects())
   {
      Author eAuthor = (Author)eEvoObject.GetOriginalObject(); // it gives Object ID

      twObjClus.WriteLine(@"AuthorID: {0}, AuthorName: {1}, PaperID: {2}, Year: {3} \n",  
                            eAuthor.AuthorID, eAuthor.AuthorName,  
                            eAuthor.Papers.Select(p => p.PaperID),  
                            eAuthor.Papers.Select(y => y.Year)  
                         );
   } 
   twObjClus.WriteLine("\n\n");
}
twObjClus.Flush();
twObjClus.Close();  

我可以在文本文件中正确打印Author_IDAuthor_Name,但没有打印Paper_IDYear,虽然这两个值都是,但在文本文件中打印的语句是:

System.Linq.Enumerable+WhereSelectListIterator`2[DirichletProcessClustering.GraphData.Paper,System.Int32]

如何在文本文件中打印所有这些值?

【问题讨论】:

    标签: c# list textwriter


    【解决方案1】:

    您需要评估返回的 IEnumerable:

    eAuthor.Papers.Select(p => p.PaperID)
    

    字符串格式化程序将在IEnumerable 上调用ToString,这就是你得到的原因:

    System.Linq.Enumerable+WhereSelectListIterator`2[DirichletProcessClustering.GraphData.Paper,System.Int32]

    您可以添加额外的foreach 语句并枚举上述IEnumerable 来为作者编写论文ID 和年份,如下所示:

    foreach (EvoObject eEvoObject in curCluster.GetClusterObjects())
    {
          Author eAuthor = (Author)eEvoObject.GetOriginalObject();
    
          twObjClus.WriteLine(
              @"AuthorID: {0}, AuthorName: {1} \n",
               eAuthor.AuthorID,
               eAuthor.AuthorName);
    
           foreach (var paper in eAuthor.Papers)
           {
               twObjClus.WriteLine(
                 @"PaperID: {0}, Year: {1}", paper.PaperID, paper.Year);
           }
    }
    

    【讨论】:

    • 我必须将这个foreach() 循环放在我的代码中的什么地方?
    • 您正在写入同一个文本文件,不是吗?那么是的。
    • 是否有必要使用string.Format(),因为我之前没有使用它
    • 是的,你是对的,你不需要 string.Format()。我更新了上面的代码,向您展示了放置 foreach 的位置
    • 谢谢,我想它现在应该可以工作了,因为我的应用需要一些时间才能完成执行,之后才能知道它是否工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多