Use of unassigned out parameter, c#
我有一个很简单的问题。我为你做了一个非常简单的函数来演示我的问题。
1 2 3 4 5 6 7 8 9 10 | static void Main(string[] args) { double[,] mydouble = new double[1, 4]; mynewMatrix(out mydouble); } public static void mynewMatrix(out double[,] d) { for (int i = 0; i < 4; i++) d[0, i] = i; } |
错误:
Use of unassigned out parameter 'newMAt' The out parameter 'newMAt'
must be assigned to before control leaves the current method
我不知道问题出在哪里。
如果数组是在函数外部定义的,那么应该使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | static void Main(string[] args) { double[,] mydouble; mynewMatrix(out mydouble);// call of method double[,] mydouble2 = new double[1, 4]; mynewMatrix2(mydouble2);// call of method // useless for what you want to do mynewMatrix3(ref mydouble2);// call of method } public static void mynewMatrix(out double[,] d) { d = new double[1, 4]; for (int i = 0; i < 4; i++) { d[0, i] = i; } } public static void mynewMatrix2(double[,] d) { for (int i = 0; i < 4; i++) { d[0, i] = i; } } // useless for what you want to do public static void mynewMatrix3(ref double[,] d) { for (int i = 0; i < 4; i++) { d[0, i] = i; } } |
如果你不知道
在c中有两个非常相似的关键字,
它们都通过引用传递值,但区别在于:
当使用
使用
nbsp;
为了说明这个问题,想象一下如果其他人编写这个代码来调用您的方法会发生什么:
1 2 | double[,] myUnassignedDouble; mynewMatrix(out myUnassignedDouble); |
显然,变量永远不会被赋值,这很糟糕。
nbsp;
这将为您提供三个选项:
第三个选项将起作用,因为到目前为止,您不需要Seam来重新分配变量。显然,随着代码变得更加复杂,这可能会发生变化。我想你一开始就有理由使用
错误消息是明确的-您需要在方法内为out参数赋值:
1 2 3 4 5 6 7 8 | public static void mynewMatrix(out double[,] d) { d = new double[1, 4]; for (int i = 0; i < 4; i++) { d[0,i]=i; } } |
您在方法之外所做的分配无效。写下这个:
1 2 3 4 5 | static void Main(string[] args) { double[,] mydouble; mynewMatrix(out mydouble); } |
您正在将值赋给数组参数的元素,但必须将Y值赋给数组本身,因为它被定义为
1 |