try_catch_throw 与return 的合用 问题!

bluesky65 2012-05-14 09:31:36
下面一段代码,我想返回string[]...但是当我在catch中什么也不做的时候,报错:use of unassigned local variable 'result' ;当我在catch中加入 throw 就可以,,而且只能是throw,其他的不行,,这是什么原理?请分析。谢谢!


public virtual string[] DxfReadPairs(string fileName)
{
StreamReader sr = null;
string[] result;
try
{
sr = new StreamReader(fileName, Encoding.Default);
result =new string[] { sr.ReadLine().Trim(),sr.ReadLine().Trim() };
}
catch(Exception)
{
throw;
}
finally
{
if (sr != null)
{
sr.Close();
}
}
return result;
}
...全文
407 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluesky65 2012-05-15
  • 打赏
  • 举报
回复
谢谢各位的讲解。。仔细看了各位给的建议,,弄好了,,谢谢!!!
tygh2001 2012-05-15
  • 打赏
  • 举报
回复
需要初始化result = null
山之魂2 2012-05-15
  • 打赏
  • 举报
回复
报错是因为进入catch了之后,方法没有 return 语句,没返回值,
用了throw 之后,就是将异常抛出到此方法外面了,此方法异常了,也就不需要返回值了。
bluesky65 2012-05-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
2楼正解。或者在返回之前在try-catch之外赋值。
[/Quote]


如果不这样用,而是在catch中加一个throw;也没有错,这是什么原因呢?
bluesky65 2012-05-15
  • 打赏
  • 举报
回复
如果不这样用,而是在catch中加一个throw;也没有错,这是什么原因呢?
[Quote=引用楼主 的回复:]
下面一段代码,我想返回string[]...但是当我在catch中什么也不做的时候,报错:use of unassigned local variable 'result' ;当我在catch中加入 throw 就可以,,而且只能是throw,其他的不行,,这是什么原理?请分析。谢谢!


public virtual string[] DxfReadPairs(string fileNa……
[/Quote]
songweixing321 2012-05-14
  • 打赏
  • 举报
回复
把return result;放到try后的大括号里也可以
test2050 2012-05-14
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/zh-cn/library/0yd65esw.aspx
这上面有讲。
static void Main()
{
int n;
try
{
// Do not initialize this variable here.
n = 123;
}
catch
{
}
// Error: Use of unassigned local variable 'n'.
Console.Write(n);
}
  • 打赏
  • 举报
回复
c#编译器比较优雅,它可以检测出你试图不正确返回string[]类型结果的请况。
jiejiep 2012-05-14
  • 打赏
  • 举报
回复
2楼正解。或者在返回之前在try-catch之外赋值。
孟子E章 2012-05-14
  • 打赏
  • 举报
回复
string[] result = null;
进行初始化,否则认为没有赋值

111,126

社区成员

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

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

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