Java转C#作业编译报CS1041错误:提示标识符预期`in`为关键字
报错根因
这个CS1041报错的逻辑非常直接:编译器在本该识别合法自定义名称(也就是标识符,比如变量名、参数名)的位置,碰到了C#的保留关键字 in,无法解析出有效的名称,就抛出了这个错误。
你遇到的这个问题完全是在线代码转换器没做好语言适配导致的,除了关键字的错误,转换出的代码还存在其他必然无法编译的问题:
- 转换器生成代码时漏写了语法结构里的变量名,把
in直接放到了需要放标识符的位置——比如foreach循环里漏写循环变量,直接写成foreach (int in 集合名),这时候本该填变量名的位置出现了关键字in,刚好匹配报错的行列提示。 - 转换器直接照搬了Java专属的
Scanner输入逻辑,C#标准库根本没有内置Scanner类,这部分代码本身就无法编译,还可能连带导致编译器解析位置错乱,报出和实际问题不匹配的错误。
修复操作
- 逐行排查所有出现
in的位置:- 只要是出现在变量名、参数名、循环变量名这类需要填自定义名称位置的
in,全部替换成合法的自定义名称。比如漏写的循环变量补上名称,写成C#合法的foreach语法:foreach (int i in arr1) - 注意:foreach语法里,连接循环变量和遍历集合的
in是C#规定的合法语法关键字,不需要修改。
- 只要是出现在变量名、参数名、循环变量名这类需要填自定义名称位置的
- 把照搬Java的输入逻辑替换为C#标准实现:
- 删掉代码里的
Scanner scan = new Scanner(System.in);这行Java专有代码 - 把循环里读取输入的
arr1[i] = scan.Next();替换为C#控制台读取逻辑:arr1[i] = int.Parse(Console.ReadLine());
- 删掉代码里的
- 修改完成后重新编译,顺手核对原Java作业的要求,比如代码里统计数组奇偶个数的部分,确认计数逻辑和题目要求一致,避免只完成排序功能漏了统计要求。
内容的提问来源于stack exchange,提问作者hanan farhat
相关产品推荐
相关产品推荐

