报错CS1503:无法将int[*,*]转换为'int'的C#代码问题求助
解决CS1503:二维数组无法转换为一维数组的问题
嘿,我来帮你搞定这个编译错误!咱们先把问题根源捋清楚:
你写的CountOddNumbersV1方法接受的是params int[] values——也就是一维整数数组,但调用它的时候传的是int[,] tabel,这是一个二维矩形数组。这俩类型在C#里是完全不同的,编译器没法自动转换,所以就抛出了CS1503错误。
另外你的代码里还有个小问题:用String.Join(", ", tabel)输出二维数组是不对的,它只会打印数组的类型名称,不会显示元素,这个我也一起帮你修正。
方案一:修改方法直接支持二维数组
最直接的办法是把CountOddNumbersV1改成接受二维数组作为参数,然后遍历二维数组的所有元素:
using System; class Program { static void Main(string[] args) { int i, j; Console.WriteLine("Introduceti numarul de linii:"); int l = int.Parse(Console.ReadLine()); Console.WriteLine("Introduceti numarul de coloane:"); int c = int.Parse(Console.ReadLine()); int[,] tabel = new int[l, c]; Console.WriteLine("Introduceti elementele matricii:"); for (i = 0; i < l; i++) { for (j = 0; j < c; j++) { Console.Write("A[{0}][{1}]=", i, j); tabel[i, j] = int.Parse(Console.ReadLine()); } } // 修正二维数组的输出逻辑 Console.Write("Masivul: "); for (i = 0; i < l; i++) { for (j = 0; j < c; j++) { Console.Write(tabel[i, j] + (j == c - 1 ? "" : ", ")); } } Console.WriteLine(); // 直接传二维数组给修改后的方法 Console.WriteLine("Masivul contine {0} numere impare ", CountOddNumbersV1(tabel)); Console.ReadKey(); } // 修改方法参数为二维数组int[,] static int CountOddNumbersV1(int[,] values) { int result = 0; // 遍历二维数组的所有元素 for (int i = 0; i < values.GetLength(0); i++) { for (int j = 0; j < values.GetLength(1); j++) { int number = values[i, j]; if (IsOdd(number)) { result++; } } } return result; } static bool IsOdd(int i) { return i % 2 != 0; } }
方案二:把二维数组转成一维数组再传入原方法
如果你不想修改CountOddNumbersV1的参数,可以先把二维数组的元素全部提取到一维数组里,再传给方法:
// 在Main方法里调用时,先转换数组 int[] flatArray = new int[l * c]; int index = 0; for (int i = 0; i < l; i++) { for (int j = 0; j < c; j++) { flatArray[index++] = tabel[i, j]; } } // 用转换后的一维数组调用原方法 Console.WriteLine("Masivul contine {0} numere impare ", CountOddNumbersV1(flatArray)); // 原CountOddNumbersV1方法可以保持不变 static int CountOddNumbersV1(params int[] values) { int result = 0; for (int i = 0; i < values.Length; i++) { int number = values[i]; if (IsOdd(number)) { result++; } } return result; }
关键知识点提醒
在C#里:
int[]是一维数组,只能用一个索引访问元素;int[,]是二维矩形数组,需要两个索引访问元素;- 这两种数组是不同的类型,不能直接互相转换,必须手动遍历转换或者修改方法参数类型。
内容的提问来源于stack exchange,提问作者jimafsf
相关产品推荐
相关产品推荐

