使用Void类型方法有Return返回值的问题

masky5310 2010-03-11 09:27:29
下面的一种用法,Void方法,可以有Rerun返回值,而且编译时也是可以通过。
看别人的代码时发现的,自己没有用过。
查了MSDN上的说明,也没有提到这种用法,MSDN原话:“如果返回类型为 void,则可使用没有值的 return 语句来停止方法的执行。如果没有 return 关键字,方法执行到代码块末尾时即会停止。具有非 void 返回类型的方法才能使用 return 关键字返回值。
        private void initControls()
{
if (RightsManagement.isUserAllowed("mkt_team") == false)
{
LabelMsg.CssClass = "ErrorMessageStyle";
LabelMsg.Text = Resources.CR.AccessNotAllowed;
LabelMsg.Visible = true;
UpdatePanelMsg.Update();
PanelPage.Visible = false;
}
else
{
/*** Sets the VarSession ***/
DataTable tableSite = new DataTable();
tableSite = manageSessionVarTableSite();
}
}

private void manageSessionVarTableSite()
{
if (SessionManagement.GetVarSession(WebCtrlUtil.GetHiddenFieldWinIndex(this), "TableSite") == null)
{
DataTable tableSite = new DataTable();
SiteCtrl.getSiteList(tableSite);
tableSite.PrimaryKey = new DataColumn[] { tableSite.Columns["id_site"] };
SessionManagement.SetVarSession(WebCtrlUtil.GetHiddenFieldWinIndex(this), "TableSite", tableSite);

return tableSite;
}
else
{
return (DataTable)SessionManagement.GetVarSession(WebCtrlUtil.GetHiddenFieldWinIndex(this), "TableSite");
}
}
...全文
1644 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
Binzo 2012-02-11
  • 打赏
  • 举报
回复
void *f(){
return (void *)(-1);
}


(void *)
This is right.
qldsrx 2010-03-11
  • 打赏
  • 举报
回复
你们公司用的是什么VS版本,至少在VS2008上是肯定不允许的。
masky5310 2010-03-11
  • 打赏
  • 举报
回复
引用 15 楼 wanyeyinfeng 的回复:
引用 13 楼 masky5310 的回复:引用 11 楼 tkascor 的回复: 好吧, 我不知道你的代码可以执行? 我test了一下, 无法编译! 我自己也试了,编译器也报错 所以,想了解下是不是真有这种用法?找出老外代码可以编译出来的原因?

你确定他可以编译通过?
你自己亲自拿他的代码编译过了吗?


是的,确信
公司内部Web正在使用
qldsrx 2010-03-11
  • 打赏
  • 举报
回复
引用楼主 masky5310 的回复:
下面的一种用法,Void方法,可以有Rerun返回值,而且编译时也是可以通过。
看别人的代码时发现的,自己没有用过。


这个代码是错误的代码,你自己编译下看看就知道了,写进去编译器就会立刻报错,居然说“编译时也是可以通过”,你的根据是什么,为什么认为书上肯定是对的,为什么不怀疑一下别人写的代码?
wanghui0380 2010-03-11
  • 打赏
  • 举报
回复
呵呵,请先查看项目设置的 警告等级

项目--项目属性---生成-----警告等级


实际没必要深究,就算真有这个写法又如何,不过是奇技淫巧。
知道“回”字的有六种写法,真的就那么有文化??
saluter99 2010-03-11
  • 打赏
  • 举报
回复
研究的精神值得鼓励和学习,路过
shighui 2010-03-11
  • 打赏
  • 举报
回复
怎么可能啊,根本不可能的事。你的编译器出问题了吧。
吟风 2010-03-11
  • 打赏
  • 举报
回复
引用 13 楼 masky5310 的回复:
引用 11 楼 tkascor 的回复:
好吧, 我不知道你的代码可以执行? 我test了一下, 无法编译!

我自己也试了,编译器也报错
所以,想了解下是不是真有这种用法?找出老外代码可以编译出来的原因?


你确定他可以编译通过?
你自己亲自拿他的代码编译过了吗?
masky5310 2010-03-11
  • 打赏
  • 举报
回复
也可以用Void型方法来给其他来赋值。
masky5310 2010-03-11
  • 打赏
  • 举报
回复
引用 11 楼 tkascor 的回复:
好吧, 我不知道你的代码可以执行? 我test了一下, 无法编译!


我自己也试了,编译器也报错
所以,想了解下是不是真有这种用法?找出老外代码可以编译出来的原因?
鸭梨山大帝 2010-03-11
  • 打赏
  • 举报
回复
MSDN都明说了,void 中使用 return 不能再在后面加返回值.
你的方法二编译通不过

void也不是没有放回值,他还是会告诉返回一个执行结果(这个结果指成功/失败)给操作系统
引用 5 楼 masky5310 的回复:
看看第二个Void方法的用法
tkscascor 2010-03-11
  • 打赏
  • 举报
回复
好吧, 我不知道你的代码可以执行? 我test了一下, 无法编译!
guyehanxinlei 2010-03-11
  • 打赏
  • 举报
回复
public void(out string returnValue)
{
//
}
wc0730 2010-03-11
  • 打赏
  • 举报
回复
为什么要纠结这个呢?
有Return的就按照有返回值的标识嘛。

我认为即使Void能RETURN出来,也是不标准的写法。
masky5310 2010-03-11
  • 打赏
  • 举报
回复
引用 4 楼 tkascor 的回复:
具有非 void 返回类型的方法才能使用 return 关键字返回值。”  这个的意思是说, 有void的, 你就是return了, 也用不了返回值!

看看如下的使用,这是从老外的代码中截取的。

/*** Sets the VarSession ***/
DataTable tableSite = new DataTable();
tableSite = manageSessionVarTableSite();

hehuan1213 2010-03-11
  • 打赏
  • 举报
回复
学习了》。。。。。。。。。
msdnsyh 2010-03-11
  • 打赏
  • 举报
回复
void只能用return后面不能有值
void sub1{return;}
masky5310 2010-03-11
  • 打赏
  • 举报
回复
看看第二个Void方法的用法
tkscascor 2010-03-11
  • 打赏
  • 举报
回复
具有非 void 返回类型的方法才能使用 return 关键字返回值。” 这个的意思是说, 有void的, 你就是return了, 也用不了返回值!
abaochan 2010-03-11
  • 打赏
  • 举报
回复
简单意思是
Void方法,return了指定的类型值,编译没有出错
加载更多回复(2)

111,092

社区成员

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

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

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