1

私は次のようなクラスを持ってい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_IDされ、テキストファイルに印刷されていますが、印刷さAuthor_Nameれていません.and 、代わりにこれらの値の両方がテキストファイルに印刷されているステートメントは次のとおりです。 Paper_IDYear

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

これらすべての値をテキスト ファイルに出力するにはどうすればよいですか?

4

1 に答える 1

0

によって返される IEnumerable を評価する必要があります。

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

文字列フォーマッタは を呼び出すToStringのでIEnumerable、次の結果が得られます。

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);
       }
}
于 2016-06-17T20:05:25.563 に答える