技术求助:拆分ListBox导入的文本条目并映射到User类字段
问题解决:拆分TXT文件中的名称与城市并映射到User类
错误原因分析
你的代码存在两个核心问题:
- 直接读取
listBox1.Text会获取控件的全部文本(包含换行符),无法逐行处理单个用户数据 - Split方法的参数写法错误:
'#' + "#" + "#"逻辑冗余,且Split按字符串分隔符拆分时,需要传入字符串数组而非错误的字符+字符串组合
正确实现代码
首先确保你的User类构造函数能接收Name和City参数:
public class User { public string Name { get; set; } public string City { get; set; } public User(string name, string city) { Name = name; City = city; } }
然后修改拆分逻辑,遍历ListBox的每一项逐行处理:
List<User> userList = new List<User>(); // 遍历ListBox中的每一行数据 foreach (string item in listBox1.Items) { // 按"###"拆分当前行,自动忽略空条目避免异常 string[] parts = item.Split(new string[] { "###" }, StringSplitOptions.RemoveEmptyEntries); // 验证拆分后的格式是否正确(确保有名称和城市两个字段) if (parts.Length == 2) { string name = parts[0].Trim(); // 去除可能的首尾空格 string city = parts[1].Trim(); User user = new User(name, city); userList.Add(user); } else { // 可选:处理格式错误的行,比如输出日志或提示 Console.WriteLine($"格式错误的行:{item}"); } }
额外优化建议
如果是直接从TXT文件读取,其实可以跳过ListBox直接处理文件,效率更高:
List<User> userList = new List<User>(); string[] lines = File.ReadAllLines("你的文件路径.txt"); foreach (string line in lines) { string[] parts = line.Split(new string[] { "###" }, StringSplitOptions.RemoveEmptyEntries); if (parts.Length == 2) { userList.Add(new User(parts[0].Trim(), parts[1].Trim())); } }
内容的提问来源于stack exchange,提问作者Ali Nouri
相关产品推荐
相关产品推荐

