如何基于String.Split条件填充复杂对象的List<T>属性?
问题分析与修复方案
嘿,我一眼就揪出你代码里的问题啦!
错误根源
你调用dr["Department"].ToString().Split(...)之后,多写了个.ToString()——这就是问题所在!Split()方法返回的是字符串数组(string[]),而数组的默认ToString()只会返回它的类型标识(也就是System.String[]),根本不会把数组里的元素转换成可添加到List的字符串项。所以你的Departments列表里最终只会塞进去一个奇怪的字符串:"System.String[]",完全不是你想要的Sales、Payroll、HR这三个部门名称。
修复方法
我们只需要把拆分得到的数组直接转换成List<string>就行,给你两种简单的实现方式:
方式一:用LINQ的ToList()(需引用System.Linq命名空间)
while (dr.Read()) { var employee = new Employee() { fName = dr["name"].ToString(), // 这里要注意:dr["name"]返回的是object,最好显式转成string Departments = dr["Department"].ToString() .Split(new string[] {" -- "}, StringSplitOptions.None) .ToList() // 直接把拆分后的数组转成List<string> }; // 记得把employee添加到你的集合里哦! }
方式二:用List的构造函数直接传入数组
如果不想依赖LINQ,也可以直接用List<string>的构造函数,它支持接收IEnumerable<string>类型的参数:
while (dr.Read()) { var employee = new Employee() { fName = dr["name"].ToString(), Departments = new List<string>( dr["Department"].ToString() .Split(new string[] {" -- "}, StringSplitOptions.None) ) }; // 添加到目标集合 }
额外优化建议
如果你的Department列可能存在空值或者拆分后产生空白项,可以把StringSplitOptions.None改成StringSplitOptions.RemoveEmptyEntries,这样会自动过滤掉无效的空元素:
.Split(new string[] {" -- "}, StringSplitOptions.RemoveEmptyEntries)
内容的提问来源于stack exchange,提问作者Amit
相关产品推荐
相关产品推荐

