日期:2014-05-18  浏览次数:21065 次

try_catch_throw 与return 的合用 问题!
下面一段代码,我想返回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;
  }

------解决方案--------------------
string[] result = null;
进行初始化,否则认为没有赋值
------解决方案--------------------
2楼正解。或者在返回之前在try-catch之外赋值。
------解决方案--------------------
c#编译器比较优雅,它可以检测出你试图不正确返回string[]类型结果的请况。
------解决方案--------------------
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);
}

------解决方案--------------------
把return result;放到try后的大括号里也可以
 
------解决方案--------------------
报错是因为进入catch了之后,方法没有 return 语句,没返回值,
用了throw 之后,就是将异常抛出到此方法外面了,此方法异常了,也就不需要返回值了。
------解决方案--------------------
需要初始化result = null