2 回答
TA贡献1890条经验 获得超9个赞
问题很简单,当您执行sr.ReadLine(). 相反,您可以考虑使用File.ReadAllLines,它将所有行读入一个数组。您可以将此与Split方法结合使用,以从每一行中提取您需要的项目。
您的 for 循环也没有意义 - 看起来您正在循环行中的每个单词,但在循环的主体中,您每次都添加所有单词。我认为for可以删除循环。
此外,不清楚是什么ec,但您可能应该在每次迭代时实例化一个新的。否则,您只是一遍又一遍地向列表添加相同的引用,它们都将具有相同的值(从读取的最后一行开始)。
这是我正在使用的示例类:
// Class to represent whatever it is you're adding in your loop
class EC
{
public int Code { get; set; }
public string Name { get; set; }
public int Number { get; set; }
public string City { get; set; }
}
我们应该做的一件事是,在将索引引用到调用返回的数组之前Split,我们应该先确保有足够的项。否则,IndexOutOfRange如果我们尝试引用一个不存在的索引,我们将得到一个异常。
此外,确保我们期望为整数的字符串实际上是整数也是一个好主意。我们可以通过 using 来做到这一点int.TryParse,它会在成功时返回 true 并将 out 参数设置为解析的值。
这是一个使用所有这些想法的示例:
// Path to our file
var filePath = @"f:\public\temp\temp.txt";
// The list of things we want to create from the file
var list = new List<EC>();
// Read the file and create a new EC for each line
foreach (var line in File.ReadAllLines(filePath))
{
string[] words = line.Split('\t');
// First make sure we have enough words to create an EC
if (words.Length > 3)
{
// These will hold the integers parsed from our words (if parsing succeeds)
int code, number;
// Use TryParse for any values we expect to be integers
if (int.TryParse(words[0], out code) && int.TryParse(words[3], out number))
{
list.Add(new EC
{
Code = code,
Name = words[1],
Number = number,
City = words[3]
});
}
}
}
- 2 回答
- 0 关注
- 323 浏览
添加回答
举报