You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不定义类的情况下将CSV动态数据中的多种类型值存入单个列表?

解决同一列表存储int和string的问题

嘿,这个场景我碰到过不少次——你需要把CSV里的混合类型数据(字符串和整数)存入同一个列表,又不想自定义类,对吧?

核心解决方案:用List<object>

在C#里,object是所有类型的基类,不管是int还是string都能隐式转换为object类型,所以把列表声明为List<object>就能完美解决你的类型不匹配问题。

修改后的代码如下:

string[] val = new string[] {"hi","20"};
List<object> obj = new List<object>(); // 这里把something替换成object
int intval;
for(int i=0;i<val.Length;i++) {
    if(int.TryParse(val[i], out intval)) {
        obj.Add(intval); // 注意C#方法名是大写开头的Add,不是小写add
    } else {
        obj.Add(val[i]);
    }
}

为什么原来的代码报错?

你之前遇到的“Cannot implicitly convert int to string”错误,本质是类型容器不匹配:如果列表声明成List<string>,存入int类型值时会触发转换失败;如果声明成List<int>,存入字符串也会报错。List<object>作为通用容器,能容纳任何类型的对象,刚好适配你的混合类型存储需求。

其他可选方案:List<dynamic>

如果你需要在后续操作中直接调用列表元素的成员(比如字符串的Length或者整数的ToString()),也可以用List<dynamic>:

List<dynamic> obj = new List<dynamic>();
// 添加元素的逻辑和上面一致

不过要注意,dynamic会跳过编译时的类型检查,运行时才会解析类型,这可能带来性能损耗或者潜在的运行时错误,所以如果只是单纯存储不同类型的数据,List<object>更安全。

从列表取值时的注意事项

当你需要从List<object>里取出数据时,建议先判断类型再转换,避免类型转换异常,比如:

foreach(var item in obj) {
    if(item is int num) {
        Console.WriteLine($"这是整数:{num}");
    } else if(item is string str) {
        Console.WriteLine($"这是字符串:{str}");
    }
}

内容的提问来源于stack exchange,提问作者yuvaraj anbazhagan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 06:50:57