Написание собственного списка с использованием TextWriter
У меня есть класс 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
в текстовом файле, но не печатается Paper_ID
а также Year
в то время как вместо обоих этих значений оператор, который печатается в текстовом файле:
System.Linq.Enumerable + WhereSelectListIterator`2 [DirichletProcessClustering.GraphData.Paper, System.Int32]
Как я могу распечатать все эти значения в текстовом файле?
1 ответ
Вам нужно оценить IEnumerable, который возвращается:
eAuthor.Papers.Select(p => p.PaperID)
Форматировщик строки собирается вызвать ToString
на IEnumerable
и вот почему вы получаете:
System.Linq.Enumerable + WhereSelectListIterator`2 [DirichletProcessClustering.GraphData.Paper, System.Int32]
Вы можете добавить дополнительный foreach
утверждение и перечислим выше IEnumerable
написать идентификаторы бумаги и годы для автора, как показано ниже:
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);
}
}