如何根据字符串列表中的列名和类型为DataTable动态添加列?
报错原因
DataTable.Columns.Add(string columnName, Type dataType)方法的第二个参数要求传入System.Type类型的实例,你当前传入的ColumnType_list[t]是存储类型名称的字符串,C#不支持字符串到Type类型的隐式转换,因此触发类型转换报错。
解决方法
使用Type.GetType()方法将类型字符串转换为对应的Type实例再传入即可,优化后的实现代码如下:
// 用for循环同时遍历两个列表,逻辑更直观 for (int i = 0; i < ColumnName_list.Count; i++) { string colName = ColumnName_list[i].Trim(); string typeName = ColumnType_list[i].Trim(); Type colType = Type.GetType(typeName); // 类型合法时直接添加,不合法可走兜底逻辑 if (colType != null) { dt1.Columns.Add(colName, colType); } else { // 兜底示例:找不到对应类型时默认用字符串类型,可根据业务需求调整 dt1.Columns.Add(colName, typeof(string)); // 也可以选择抛出异常提示类型配置错误:throw new ArgumentException($"无效的列类型:{typeName}"); } }
注意事项
- 首先修正类型字符串的拼写错误,你示例中的
Sistem.String为拼写错误,正确写法是System.String,必须保证类型字符串是对应类型的有效全限定名。 - 如果要添加的列是自定义类型,需要在类型字符串中补充程序集信息,格式为
"命名空间.类名, 程序集名称"。 - 非空校验可以避免类型配置错误时程序直接崩溃,可根据业务场景选择兜底逻辑或者抛出明确的错误提示。
内容的提问来源于stack exchange,提问作者RVF
相关产品推荐
相关产品推荐

