错误:并非所有的代码路径都返回值

memei85810 2008-12-27 11:35:10
各位前辈 小弟用C#编写了如下代码:
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
public static bool asdf()
{
for ( int i = 0 ; i < 30 ; i++ )
{
if ( i == 29 )
return true;
else
return false;
}
}
static void Main( string[] args )
{

asdf();
Console.ReadKey();
}
}
}

结果提示 错误“ConsoleApplication1.Program.asdf()”: 并非所有的代码路径都返回值
俺知道这意思说 俺自定义的函数asdf() 有个别情况没有设返回值 但是各位请看上面的代码 可返回的情况应该已经考虑全面了才对呀 除了满足if返回true之外 其他情况都返回false

这段代码是俺编程时发现这个问题后 特意编这段简单的代码来测试的 俺发现把用if判断返回情况嵌套到for循环里就会出现这种情况 如果把for注释掉 只留下if else这几行 程序可以正常运行

俺用C++编了同样的代码进行测试 结果却是正常通过 而且返回值也是正确的
俺使用的是 visual studio 2005

有前辈知道到底是什么原因么???
...全文
181 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
memei85810 2008-12-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hbxtlhx 的回复:]
你只是在For循环里有Return,而在For外面没有。编译器则会认为你的函数有可能不能“Return”
[/Quote]

是这么个问题 俺也是最近才发现的

谢谢hbxtlhx朋友
memei85810 2008-12-31
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 PowerFedora 的回复:]
如果for没有执行的话,跑出循环,自然就没有办法有返回值了。说明ide是很智能的
[/Quote]

俺还不太了解.net的一些机制 不过按俺们自己的思考 上面的代码 这个for应该会执行吧~ 而且一旦执行 它还没跑出循环前就已经return了 根本也不用等它跑出循环再判断有没有return 因为循环里的代码是非此即彼 不执行if就只能执行else了

俺调试时发现 除了提示这个错误以外 还提示了一个警告:检测到无法访问的代码--i++这一步,但是没有提示i=0和i<30这两步,这么说,实际上编译器可能已经进入循环了

晕~~不过这应该是C#的机制,因为在C++里写了一个完全一样的代码(当然是用C++的语法),也没有在循环外加return,而程序是正常执行,返回值也正常,该true的true,该false的时候false

看来.net还有好多东西要研究呢~~
特别 2008-12-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 Donneyming 的回复:]
for 循环外没有return 字句!
[/Quote]
北京的雾霾天 2008-12-28
  • 打赏
  • 举报
回复
如果能保证For一定执行是没问题的,但编译器不会智能到在编译的时候就知道运行结果的。在它看来For代码段里的代码不被执行是极可能的事。如果没有执行则是没有Return的。
jivi 2008-12-28
  • 打赏
  • 举报
回复
.net 里 只在条件语句里 return 不可以的。包括if else 里都有return
PowerFedora 2008-12-28
  • 打赏
  • 举报
回复
如果for没有执行的话,跑出循环,自然就没有办法有返回值了。说明ide是很智能的
jrl5365 2008-12-28
  • 打赏
  • 举报
回复
for 结束的时候没有return
steden 2008-12-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hbxtlhx 的回复:]
你只是在For循环里有Return,而在For外面没有。编译器则会认为你的函数有可能不能“Return”
[/Quote]

我觉得,是应该完全报错。必境面向对像,应该是非常严格的。哪怕是有一点错误也要报错。
这样反而会对程序员以后的代码维护有很大的帮助。
ouyan88 2008-12-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 Donneyming 的回复:]
for 循环外没有return 字句!
[/Quote]
.
Donneyming 2008-12-28
  • 打赏
  • 举报
回复
for 循环外没有return 字句!
xiaofei0804 2008-12-28
  • 打赏
  • 举报
回复
这个问题有点~~
net5i 2008-12-27
  • 打赏
  • 举报
回复
只能说是.NET编译器不够完善,这种情况下我感觉编译器应该返回警告而不是错误,这样比较好。

不过这也是一个建议,建议我们要追求更好的一个代码逻辑
北京的雾霾天 2008-12-27
  • 打赏
  • 举报
回复
你只是在For循环里有Return,而在For外面没有。编译器则会认为你的函数有可能不能“Return”
ericz9 2008-12-27
  • 打赏
  • 举报
回复
学习
北京的雾霾天 2008-12-27
  • 打赏
  • 举报
回复
这样试试看:


public static bool asdf()
{
for ( int i = 0 ; i < 30 ; i++ )
{
if ( i == 29 )
return true;
}
return false
}

110,571

社区成员

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

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

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