我有一个非常简单的问题.我为你演示了一个非常简单的功能来演示我的问题.
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;
}
Run Code Online (Sandbox Code Playgroud)
错误:
使用未分配的输出参数'newMAt'必须在控制离开当前方法之前分配out参数'newMAt'
我不知道问题出在哪里.
xan*_*tos 86
如果数组是在函数的OUTSIDE中定义的,则应该使用a ref
(或者没有,考虑到数组是引用类型).out
表示参数将在返回之前在函数中初始化.一些使用示例:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我要补充说,如果你不知道它们之间有什么区别ref
,out
你可以阅读.NET中ref和out参数之间的区别
Buh*_*ica 19
在c#中有两个非常相似的关键字,ref
和out
.
它们都通过引用传递值,但区别在于:
使用ref
编译器时,需要在调用方法之前分配变量.
使用out
它时不需要这个.这意味着您将无法假定参数已经填充.您将无法在方法中读取其值.
为了说明问题,想象一下如果其他人编写此代码来调用您的方法会发生什么:
double[,] myUnassignedDouble;
mynewMatrix(out myUnassignedDouble);
Run Code Online (Sandbox Code Playgroud)
显然,永远不会分配变量,这很糟糕.
这为您提供了三个选项:
void mynewMatrix(ref double[,] d)
void mynewMatrix(out double[,] d)
void mynewMatrix(double[,] d)
第三个选项将起作用,因为到目前为止,您不需要重新分配变量.显然,随着代码变得更加复杂,可能会发生变化.我假设你确实有你的理由out
首先使用?
错误消息很清楚 - 您需要为方法内的 out 参数分配一个值:
public static void mynewMatrix(out double[,] d)
{
d = new double[1, 4];
for (int i = 0; i < 4; i++)
{
d[0,i]=i;
}
}
Run Code Online (Sandbox Code Playgroud)
您在方法外部进行的分配无效。就这样写:
static void Main(string[] args)
{
double[,] mydouble;
mynewMatrix(out mydouble);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
56501 次 |
最近记录: |