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