如何用LINQ初始化所有元素为同一非默认值的10×10交错数组
解决LINQ创建并填充10×10交错数组的问题
你尝试的第二种写法之所以报以下错误:
CS0226: 无法将类型“System.Collections.Generic.IEnumerable[]”隐式转换为“string[][]”。存在显式转换(是否缺少强制转换?)
是因为内层Select返回的是IEnumerable<string>类型,而非string[],无法直接隐式转换为目标类型的元素。
正确的LINQ写法
只需要在内层的枚举序列后调用.ToArray(),将其转换为字符串数组即可,这里推荐用Enumerable.Repeat来直接生成重复元素的序列,更简洁:
public static string[][] computerBoard = new string[10][] .Select(_ => Enumerable.Repeat("A", 10).ToArray()) .ToArray();
如果坚持用内层Select遍历数组元素赋值,也可以修改为:
public static string[][] computerBoard = new string[10][] .Select(_ => new string[10].Select(__ => "A").ToArray()) .ToArray();
双重循环的替代写法
如果追求逻辑直观或需要后续扩展复杂赋值逻辑,双重循环是更直接的选择:
public static string[][] computerBoard = new string[10][]; for (int i = 0; i < 10; i++) { computerBoard[i] = new string[10]; for (int j = 0; j < 10; j++) { computerBoard[i][j] = "A"; } }
两种写法性能差异可以忽略,选择哪种取决于代码的可读性和后续维护需求。
内容的提问来源于stack exchange,提问作者moshesilver
相关产品推荐
相关产品推荐

