CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

怎么在用yield return的同时又能捕捉异常啊?

楼主kaka100()2006-11-03 11:39:13 在 .NET技术 / C# 提问

各位大侠,写了个函数  
  static   IEnumerable<String>   ReadFile(String   fileName)  
                  {    
                          try  
                          {  
                                  reader=new   StreamReader(fileName);  
                                  for   (string   line   =   reader.ReadLine();   line   !=   null;   line   =   reader.ReadLine())  
                                          yield   return   line;  
                          }  
                          catch(IOException   e)  
                          {  
                                  Console.WriteLine(e.Message);  
                          }  
                          finally  
                          {  
                                  if(reader!=null)  
                                  reader.Close();  
                          }  
                  }  
  编译通不过,在包含catch子句的try模块里不能用yield   return,有没有办法即可以捕捉异常又可以用yield   return啊?或是有什么替代的办法??谢谢各位啦! 问题点数:50、回复次数:5Top

1 楼flyskywlh(成功时享受成就,失意时享受生活..)回复于 2006-11-03 12:03:39 得分 25

这是MSDN里的说明:  
   
  yield   语句只能出现在   iterator   块中,该块可用作方法、运算符或访问器的体。这类方法、运算符或访问器的体受以下约束的控制:  
   
  不允许不安全块。  
   
  方法、运算符或访问器的参数不能是   ref   或   out。  
   
  yield   语句不能出现在匿名方法中。有关更多信息,请参见匿名方法(C#   编程指南)。  
   
  当和   expression   一起使用时,yield   return   语句不能出现在   catch   块中或含有一个或多个   catch   子句的   try   块中。有关更多信息,请参见异常处理语句(C#   参考)。  
  Top

2 楼kaka100()回复于 2006-11-03 12:06:53 得分 0

我知道啊,就是问有没有办法可以替代之类的,可以起到类似功能的呢?Top

3 楼oolongTea(顶者)回复于 2006-11-03 12:14:53 得分 25

换个写法应该就可以了:  
  先判断是否会触发IOException异常,如果会则   throw    
  否则yield   return   line;Top

4 楼oolongTea(顶者)回复于 2006-11-03 12:16:28 得分 0

即如果fileName不存在,则抛出异常Top

5 楼kaka100()回复于 2006-11-03 14:19:08 得分 0

static   IEnumerable<String>   ReadFile(String   fileName)  
                  {    
                          StreamReader   reader   =   null;  
                          int   flag   =   0;  
                          string   line   =   "";  
                          try  
                          {  
                                  reader   =   new   StreamReader(fileName);  
                          }  
                          catch(IOException   e)  
                          {  
                                  Console.WriteLine(e.Message);  
                                  flag   =   1;  
                          }  
                          if   (flag   !=   1)  
                          {  
                                  for   (line   =   reader.ReadLine();   line   !=   null;   line   =   reader.ReadLine())  
                                          yield   return   line;  
                          }  
                          else  
                          {  
                                  yield   return   line;  
                          }  
  改成这样,可以运行了,但总感觉有粗制滥造之嫌:(Top

相关问题

关键词

得分解答快速导航

  • 帖主:kaka100
  • flyskywlh
  • oolongTea

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo