如何将Python生成器转换为C#?验证给出的LINQ实现代码是否正确
问题分析与代码修正
你的代码存在几处问题,同时没有完全贴合“生成器形式”的要求,具体说明和修正方案如下:
1. 拼写错误
Console.Writeline方法名拼写错误,正确写法是Console.WriteLine(第二个字母W需要大写)。
2. 数组输出问题
直接打印数组对象只会输出其类型标识(比如System.Int32[]),无法展示数组内的元素。要输出元素内容,需要用string.Join拼接成可读字符串:
Console.WriteLine(string.Join(", ", y));
3. 生成器形式的正确实现
你当前调用了.ToArray(),会立即遍历序列并生成数组,这和Python的列表推导式行为一致,但并非**生成器(延迟执行)**形式。C#中对应Python生成器的是IEnumerable<int>,无需调用.ToArray(),序列会在迭代时才逐个计算元素:
int[] x = new int[] {5, 9, 0, 7, 2}; // 生成器形式:延迟执行,返回IEnumerable<int> var y = from i in x where i % 2 == 0 select i * i; // 迭代生成器获取元素并输出 foreach (var num in y) { Console.Write(num + " "); } // 或用string.Join一次性输出所有元素 Console.WriteLine(string.Join(", ", y));
如果你的需求是立即生成数组(等价于Python的列表推导式),核心逻辑是对的,但要修正拼写和输出方式:
int[] x = new int[] {5, 9, 0, 7, 2}; var y = (from i in x where i%2 == 0 select i*i).ToArray(); Console.WriteLine(string.Join(", ", y)); // 输出:0, 4
内容的提问来源于stack exchange,提问作者Red Mermaid
相关产品推荐
相关产品推荐

