提取逗号分隔字符串指定值报错:无法从string_val反序列化排查
代码问题分析及修正建议
你的代码存在多处问题,报错信息“无法从string_val反序列化”大概率和变量定义的语法错误直接相关,具体问题及修正如下:
1. 变量声明语法错误
你写的myvar: "123,2344,567,3334"不是合法的C#变量声明方式,正确的定义应该是:
string myvar = "123,2344,567,3334";
这种非法的变量定义格式会导致程序解析变量时出现序列化/解析类错误。
2. 索引取值不符合需求
你的需求是提取第二个逗号之后的值,原字符串按逗号分割后得到的数组元素对应关系为:
items[0] = "123"(第一个逗号前)items[1] = "2344"(第一个与第二个逗号之间)items[2] = "567"(第二个逗号之后的第一个值)items[3] = "3334"(第三个逗号之后的值)
如果要取第二个逗号之后的第一个值,应该用items[2]而非items[3];如果要取第二个逗号之后的所有内容,不能直接用Split,需要用Substring方法:
// 获取第二个逗号之后的全部内容 int secondCommaIndex = myvar.IndexOf(',', myvar.IndexOf(',') + 1); string afterSecondComma = myvar.Substring(secondCommaIndex + 1);
3. 语法细节错误
var val=items[3]末尾缺少分号,C#语句必须以分号结尾,正确写法为var val = items[2];(对应第二个逗号后的第一个值)。
4. 文件写入的资源泄漏风险
直接调用StreamWriter.Close()存在资源泄漏风险——如果写入过程中抛出异常,Close()可能无法执行。建议用using语句自动释放资源:
string row = $"{val};Amount"; // 字符串插值更简洁 using (StreamWriter file2 = new StreamWriter(fileName, true)) { file2.WriteLine(row); } // using块结束时自动释放资源,无需手动调用Close()
总结
先修正myvar的变量定义语法,再根据实际需求调整取值逻辑,最后完善文件写入的代码写法,即可解决当前问题。
内容的提问来源于stack exchange,提问作者Antônio Magalhaes
相关产品推荐
相关产品推荐

