报错:无法隐式转换'string'为'string[]',代码问题求解
解决
Cannot implicitly convert type 'string' to 'string[]'错误 这个错误的原因特别直接——你搞错了StreamReader.ReadLine()的返回值类型和变量的类型匹配关系。
问题拆解
fajlbe.ReadLine()的作用是读取文件的单行内容,它返回的是一个string类型的值(也就是你txt里每行的那个单个单词)。- 但你把这个返回值直接赋值给了声明为
string[](字符串数组)的变量tomb,两种类型完全不兼容,编译器自然会抛出类型转换错误。
而且看你的代码逻辑,你其实根本不需要这个tomb数组——因为每行只有一个单词,直接把读取到的字符串赋值给TSor[n].árucikk就够了。
修正后的代码
struct Sor { public string árucikk; } static Sor[] TSor = new Sor[1000]; static void Main(string[] args) { StreamReader fajlbe = new StreamReader("penztar.txt"); int n = 0; while(!fajlbe.EndOfStream) { // 直接读取单行字符串,赋值给结构体字段 string currentWord = fajlbe.ReadLine(); // 加个判断避免空行干扰 if (!string.IsNullOrEmpty(currentWord)) { TSor[n].árucikk = currentWord; n++; // 防止数组越界,因为TSor只有1000个元素 if (n >= TSor.Length) { break; } } } // 记得手动关闭流,或者用using语句更安全 fajlbe.Close(); Console.WriteLine("读取完成"); // 后续逻辑... }
更优雅的优化建议
- 用
using语句管理流资源:自动释放资源,不用手动调用Close():
using (StreamReader fajlbe = new StreamReader("penztar.txt")) { // 所有读取逻辑放在这里 }
- 替换固定数组为
List<Sor>:避免数组长度不够的问题,支持动态扩容:
struct Sor { public string árucikk; } static void Main(string[] args) { List<Sor> sorList = new List<Sor>(); using (StreamReader fajlbe = new StreamReader("penztar.txt")) { while(!fajlbe.EndOfStream) { string currentWord = fajlbe.ReadLine(); if (!string.IsNullOrEmpty(currentWord)) { sorList.Add(new Sor { árucikk = currentWord }); } } } // 如果需要数组格式,随时转换 Sor[] TSor = sorList.ToArray(); // 后续逻辑... }
内容的提问来源于stack exchange,提问作者Gergely Dávid
相关产品推荐
相关产品推荐

