我有这样的文本文件。我想逐行阅读并将这些信息存储到List<Store>
,Store
是自定义类型。
Store ID: 01
Name: Kingfisher
Branch Number: 1
Address: 23 Emerson St
Phone: 422361609
-----END OF RECORD-----
Store ID: 02
Name: Harvey
Branch Number: 2
Address: 23 Korby St
Phone: 422361609
-----END OF RECORD-----
Store ID: 175
Name: Roger
Branch Number: 4
Address: 275 Carmody Rd
Phone: 428395719
-----END OF RECORD-----
这是我正在使用的。因为记录始终与列表中显示的顺序一致,所以我逐行阅读并分配store.ID
,store.name
,...直到它到达记录的最终属性为{{1然后,它会将它添加到List中,并在store.phoneNumber
循环时继续foreach
循环。
但问题是当我在列表中搜索时,它只能返回最终记录。似乎List只有一个元素,这是最终记录。任何人都可以指出我错在哪里吗?
Store ID
答案 0 :(得分:4)
我会使用LINQ
代替Batch
方法来创建批量的行,以便您可以轻松设置属性:
File.ReadLines("path")
.Batch(5)
.Select(x => x.ToList())
.Select(values => new Store
{
ID = values[0].Split(':').Trim(),
name = values[1].Split(':').Trim(),
branchNo = int.Parse(values[2].Split(':').Trim()),
address = values[3].Split(':').Trim(),
phoneNumber =int.Parse(values[4].Split(':').Trim())
}.ToList();
您需要添加对MoreLINQ库的引用才能使用Batch
方法。
答案 1 :(得分:1)
List<Store> stores = new List<Store>();
var storeTemp = new Store();
foreach (string line in File.ReadAllLines(@"C:\Store.txt"))
{
// You needto create a new instance each time
if (line.Contains("Store ID: "))
storeTemp.ID = line.Substring(10);
if (line.Contains("Name: "))
storeTemp.name = line.Substring(6);
if (line.Contains("Branch Number: "))
storeTemp.branchNO = Convert.ToInt32(line.Substring(15));
if (line.Contains("Address: "))
storeTemp.address = line.Substring(9);
if (line.Contains("Phone: "))
{
storeTemp.phoneNumber = Convert.ToInt32(line.Substring(7));
stores.Add(storeTemp);
storeTemp = new Store(); // You need to recreate the object, otherwise you overwrite same instance
}
}
答案 2 :(得分:0)
您每次都会在storeTemp的内存中创建一个新空间。目前,您正在将数据写在同一位置。
答案 3 :(得分:0)
只需将商店类型从Class
更改为Struct