我创建了一个非常简单的类,并尝试使用List类从文本文件读取到列表中。
我使用StreamReader inputFile打开文件,但是当我尝试使用ReadLine时,出现一个错误,我无法从字符串转换为... .Bowler(这是我的列表中的名称。
我创建了该类,以便可以从多种形式访问列表。 我显然是C#的新手,并且是一般编程的人。
//the ReadBowlers method reads the names of bowlers
//into the listBowlers.
private void ReadBowlers(List<Bowler> listBowlers)
{
try
{
//Open the Bowlers.txt file.
StreamReader inputFile = File.OpenText("Bowlers.txt");
//read the names into the list
while (!inputFile.EndOfStream)
{
listBowlers.Add(inputFile.ReadLine());
}
//close the file.
inputFile.Close();
}
catch (Exception ex)
{
//display error message
MessageBox.Show(ex.Message);
}
给我错误的行是: listBowlers.Add(inputFile.ReadLine());
答案 0 :(得分:1)
您可以创建一个方法,该方法需要从文件中读取string
并返回Bowler
。
例如,假设您的数据行如下所示:
Bob Smith,5,XYZ
public Bowler Parse(string inputLine)
{
// split the line of text into its individual pieces
var lineSegments = inputLine.Split(',');
// create a new Bowler using those values
var result = new Bowler
{
Name = lineSegments[0],
Id = lineSegments[1],
SomeOtherBowlerProperty = lineSegments[2]
}
return result;
}
现在您可以执行以下操作:
var line = inputFile.ReadLine();
var bowler = Parse(line);
listBowlers.Add(bowler);
但是它变得更好了!如果Bowler
有很多属性怎么办?如果您不想跟踪每列的位置怎么办?
CsvHelper是一个很棒的Nuget软件包,我敢肯定还有其他类似的软件包。他们让我们使用别人测试过的代码,而不是自己编写。 (我之所以没有这样做,是因为首先编写它是学习的好方法,但是学习使用可用的东西也是很好的。)
如果您的数据具有列标题,则CsvHelper会找出哪些列包含适合您的属性。
因此,假设您将这些数据保存在文件中:
FirstName,LastName,Id,StartDate
鲍勃,史密斯,5,1 / 1/2019
约翰,加尔特,6,2 / 1/2019
这堂课
public class Bowler
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime? StartDate { get; set; }
}
您可以编写以下代码:
public List<Bowler> GetBowlersFromFile(string filePath)
{
using(var fileReader = File.OpenText(filePath))
using (var reader = new CsvReader(fileReader))
{
return reader.GetRecords<Bowler>().ToList();
}
}
它查看标题行并找出哪一列。
答案 1 :(得分:0)
ReadLine()为您提供了字符串,因此除非指定了显式转换,否则您无法将其直接分配给自定义类。
更好地创建一个新的Bowler实例,通过分别解析字符串来分配其值,然后将该实例添加到列表中。
答案 2 :(得分:0)
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>