求助:如何用字符串列表作键、对象列表作值创建员工Hashtable?
快速构建员工Hashtable的方法
嗨,这事儿好办!既然你已经有了一一对应的用户名列表UsersToCompare和员工对象列表People,咱们可以用几种简洁的方式把它们转成以用户名为键、员工对象为值的Hashtable:
方法一:用LINQ快速生成(推荐)
如果你的项目里引用了System.Linq,可以用Zip方法把两个列表配对,再转成Dictionary,最后转换成Hashtable(毕竟现在.NET里Dictionary比Hashtable更常用,但如果业务必须用Hashtable的话,转换也很简单):
using System.Linq; using System.Collections; // 先将两个列表配对并生成Dictionary var employeeDict = UsersToCompare.Zip(People, (userName, employee) => new { UserName = userName, Employee = employee }) .ToDictionary(pair => pair.UserName, pair => pair.Employee); // 转换为Hashtable Hashtable employeeHashtable = new Hashtable(employeeDict);
方法二:手动循环构建
如果不想用LINQ,或者需要更灵活地处理重复键这类特殊情况,直接循环遍历列表构建Hashtable也很直观:
using System.Collections; Hashtable employeeHashtable = new Hashtable(); for (int i = 0; i < UsersToCompare.Count; i++) { // 先检查键是否已存在,避免重复键导致的异常 if (!employeeHashtable.ContainsKey(UsersToCompare[i])) { employeeHashtable.Add(UsersToCompare[i], People[i]); } else { // 根据你的需求处理重复键:比如覆盖旧值、抛出提示或跳过 // employeeHashtable[UsersToCompare[i]] = People[i]; // 覆盖模式 // throw new ArgumentException($"用户名 {UsersToCompare[i]} 已存在"); // 抛出异常 } }
注意事项
- 确保
UsersToCompare和People的长度完全一致,否则Zip方法会以较短的列表为准,漏掉较长列表里的元素;循环的话则会出现索引越界的问题。 - 用户名作为键必须唯一!如果
UsersToCompare里有重复的用户名,ToDictionary会直接抛出异常,所以用循环的话记得加上重复键的处理逻辑。
内容的提问来源于stack exchange,提问作者user5463745
相关产品推荐
相关产品推荐

