C# out和ref

qikawe2010 2011-09-19 05:04:48
请教如下用Out报错,错误为:使用了未赋值的 out 参数“HeadPos”,控制离开当前方法之前必须对 out 参数“HeadPos”赋值;
用ref没错
private static void MatchHead(string[] sqlHead, string[] codeHead, out int[] HeadPos)
{
for (int n = 0; n < sqlHead.Length; n++)
{
for (int p = 0; p < codeHead.Length; p++)
{
if (sqlHead[n].Equals(codeHead[p].Trim()))
{
HeadPos[n] = p;
break;
}
}
}
}
...全文
285 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
bios8086 2011-09-19
  • 打赏
  • 举报
回复
out 和ref 本质是一样的都是指针的指针!
z_f_p 2011-09-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 enter89 的回复:]
C# code

public static void Main(string[] args)
{
try
{
int i;
Test(out i);
Console.WriteLine("Success!");
……
[/Quote]
+1
正解,详细:http://wenku.baidu.com/view/df2e95da6f1aff00bed51e3b.html
ycproc 2011-09-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jinfengyiye 的回复:]

1楼7楼都说反了吧。
[/Quote]
反了
636f6c696e 2011-09-19
  • 打赏
  • 举报
回复
问题出在这句话:
if (sqlHead[n].Equals(codeHead[p].Trim()))
{
HeadPos[n] = p;
break;
}


编译器判断到存在headPos不赋值的可能,所以报错。
必须保证对 out 参数“HeadPos”的赋值!
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hhqsy 的回复:]
out参数要有初始值才能传给函数
[/Quote]
说错了呵呵,是ref参数要有初始值才能传给函数
gw6328 2011-09-19
  • 打赏
  • 举报
回复
1楼7楼都说反了吧。
Waldenz 2011-09-19
  • 打赏
  • 举报
回复

public static void Main(string[] args)
{
try
{
int i;
Test(out i);
Console.WriteLine("Success!");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);

}
Console.ReadLine();
}
public static void Test(out int i)
{
i=3;
Console.WriteLine(i.ToString());
}

out 调用前可以不用赋值
ref 必须有初始值.
把代码中的out 换成ref 会编译出错
余山水 2011-09-19
  • 打赏
  • 举报
回复
out 输出参数,必须初始化
ref输入输出参数,不须初始化
  • 打赏
  • 举报
回复
out参数要有初始值才能传给函数
qikawe2010 2011-09-19
  • 打赏
  • 举报
回复
可能那样的赋值编译器不认,这样
private static void MatchHead(string[] sqlHead, string[] codeHead, out int[] HeadPos)
{
int[] ak = new int[sqlHead.Length];
for (int n = 0; n < sqlHead.Length; n++)
{
for (int p = 0; p < codeHead.Length; p++)
{
if (sqlHead[n].Equals(codeHead[p].Trim()))
{
ak[n] = p;
break;
}
}
}
HeadPos = ak;
}

就行了
qikawe2010 2011-09-19
  • 打赏
  • 举报
回复
里面有赋值啊
AaronNanQH 2011-09-19
  • 打赏
  • 举报
回复
out 在函数执行完毕时候最终必须有一个值,不然的话会出你所说的那个错。
_三皮_ 2011-09-19
  • 打赏
  • 举报
回复
out在函数里必须赋值
out带出值
ref可带入带出
yp136 2011-09-19
  • 打赏
  • 举报
回复
用out需要先赋值不能光定义
用ref可以不赋值

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧