在方法中重复从try块到上面的try块的实例声明

时间:2010-03-26 15:18:37

标签: visual-studio-2008 refactoring resharper

我经常发现自己遇到这样的代码:

try
{
  StreamWriter strw = new StreamWriter();
}

但是,没有引用try块范围之外的对象。我怎么能重构(提取到Visual Studio中的字段说没有字段或其他东西)try块中的语句,以便它在try块上面声明,所以我可以在方法的任何地方使用它?

由于

2 个答案:

答案 0 :(得分:1)

您只需要拆分声明和作业。如果你有Resharper,有一种方法可以进行拆分,但你必须手动移动它:

StreamWriter strw = null;
try
{
    strw = new StreamWriter();
}
catch()
{ // ...

通常,还需要添加(技术上无用的)= null;,以防止在分配之前使用变量的潜在警告,因为赋值位于不同的范围内。这取决于你如何使用数据。

此外,由于StreamWriter是IDisposable,因此您需要确保拥有可以处理的finally块,或将整个用法放在using块中。

答案 1 :(得分:0)

StreamWriter strw = null;
try
{
  strw = new StreamWriter();
}

但是对于StreamWriterIDisposable),最好使用using - 关键字:

using( StreamWriter strw = new StreamWriter() )
{
  ..
}