c# 中out参数

wanghengxn 2011-06-16 09:25:42
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) {
int c;
int k = 9;
if (true) {
z(out c);
}
Response.Write(c.ToString());


}
}
public bool z(out int a) {
a = 1;
return true;
}
正常输出1.
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) {
int c;
int k = 9;
if (k==9) {
z(out c);
}
Response.Write(c.ToString());


}
}
public bool z(out int a) {
a = 1;
return true;
}
编译错误,c未初始化
...全文
170 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghengxn 2011-06-16
  • 打赏
  • 举报
回复
要沉了!
wanghengxn 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 xu56180825 的回复:]

引用 3 楼 wanghengxn 的回复:
引用 1 楼 xu56180825 的回复:

局部变量需要出世化

out参数无需初始化,只需在函数返回之前,给它初始化即可。

做为OUT是可以不初始化..但用做局部变量是要的
[/Quote]
但是例子1成功输出了1
wanghengxn 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 flyerwing 的回复:]

条出函数前必须初始化好象.
[/Quote]
是的,已经初始化了
xu56180825 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wanghengxn 的回复:]
引用 1 楼 xu56180825 的回复:

局部变量需要出世化

out参数无需初始化,只需在函数返回之前,给它初始化即可。
[/Quote]
做为OUT是可以不初始化..但用做局部变量是要的
flyerwing 2011-06-16
  • 打赏
  • 举报
回复
条出函数前必须初始化好象.
wanghengxn 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 porschev 的回复:]
c变量没有赋初始值。。我知道在out参数是可以的。。

但是在Response.Write(c.ToString());

就不可以了。。。。错在这里。。不在out
[/Quote]
那例子1 你作何解释?
ghost5216 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 isjoe 的回复:]
C# code


if (k==9) {
z(out c);
}


由于是有条件判断,编译器无法确定z(out c);一定能被执行导致的。
[/Quote]
+1

Response.Write(c.ToString());
这里的c未初始化
wanghengxn 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 isjoe 的回复:]

C# code

if (k==9) {
z(out c);
}




由于是有条件判断,编译器无法确定z(out c);一定能被执行导致的。
[/Quote]
if(true)和if(k==9)在编译器有什么区别?
我们没学底层的东西,求指教
porschev 2011-06-16
  • 打赏
  • 举报
回复

c变量没有赋初始值。。我知道在out参数是可以的。。

但是在Response.Write(c.ToString());

就不可以了。。。。错在这里。。不在out


porschev 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wanghengxn 的回复:]

引用 2 楼 porschev 的回复:
int c;没有给值。。

给一个初始值。。

给不给初值 无所谓,起作用的是函数中a=1,无论初始化与否,都是1
[/Quote]


不是说他是out参数。。所以要给初始值

Response.Write(c.ToString());

你这里用到它。。。。
小牛小骆驼 2011-06-16
  • 打赏
  • 举报
回复
关注!
isjoe 2011-06-16
  • 打赏
  • 举报
回复

if (k==9) {
z(out c);
}



由于是有条件判断,编译器无法确定z(out c);一定能被执行导致的。
wanghengxn 2011-06-16
  • 打赏
  • 举报
回复
例子1说明了根本不需要初始化
wanghengxn 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 porschev 的回复:]
int c;没有给值。。

给一个初始值。。
[/Quote]
给不给初值 无所谓,起作用的是函数中a=1,无论初始化与否,都是1
Tragedy 2011-06-16
  • 打赏
  • 举报
回复
ref 需要给,out不需要给
tashiwoweiyi 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 porschev 的回复:]
int c;没有给值。。

给一个初始值。。
[/Quote]
++
wanghengxn 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xu56180825 的回复:]

局部变量需要出世化
[/Quote]
out参数无需初始化,只需在函数返回之前,给它初始化即可。
porschev 2011-06-16
  • 打赏
  • 举报
回复

int c;没有给值。。

给一个初始值。。
xu56180825 2011-06-16
  • 打赏
  • 举报
回复
局部变量需要出世化
Mr_Oyeah 2011-06-16
  • 打赏
  • 举报
回复
这类问题,可以不必深究
--------------------------------------

应该是编译的问题,
if(true){情况1}
if(k==9){情况2}
情况1被编译了,
而情况2应该没有真正被编译,导致了c没有赋值
也就是c.tostring()通不过了!
--------------------------------------

111,093

社区成员

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

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

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