C# 变量不';不存在于当前环境中
但是,当我编译它时,我得到一个错误:名称“FS”在当前上下文中不存在 所以我在try..catch块前面放了一个FileStream声明,如下所示C# 变量不';不存在于当前环境中,c#,C#,但是,当我编译它时,我得到一个错误:名称“FS”在当前上下文中不存在 所以我在try..catch块前面放了一个FileStream声明,如下所示 I have the following code: try { FileStream FS = new FileStream(this.InFile, FileMode.Open, FileAccess.Read); return "";
I have the following code:
try
{
FileStream FS = new FileStream(this.InFile, FileMode.Open, FileAccess.Read);
return "";
}
catch (FileNotFoundException ex)
{
return ex.Message;
}
finally
{
FS.Close();
FS.Dispose();
}
但是当我编译时,我得到一个错误,说使用未赋值变量FS,它指向finally块
现在我了解了这两个错误以及为什么会出现这些错误,但我不知道如何编写代码,这样我就可以尝试编写代码并捕获任何错误
任何帮助都将不胜感激-谢谢 如果抛出FileNotFoundException,会发生什么?然后您将看到finally子句(FS.Close()和FS.Dispose()),但是FS没有初始化!您应该做的是将FS初始化为null,并在finally子句中添加if语句来检查FS是否为null
FileStream FS;
try
{
FileStream FS = new FileStream(this.InFile, FileMode.Open, FileAccess.Read);
return "";
}
catch (FileNotFoundException ex)
{
return ex.Message;
}
finally
{
FS.Close();
FS.Dispose();
}
FS是在try块的作用域中声明的,因此它不存在于该块之外 正确的代码是:
FileStream FS = null;
try
{
FS = new FileStream(this.InFile, FileMode.Open, FileAccess.Read);
return "";
}
catch (FileNotFoundException ex)
{
return ex.Message;
}
finally
{
if (FS != null) {
FS.Close();
FS.Dispose();
}
}
此代码不是最优的(有关最优解决方案,请参阅Marc的答案)。这段代码仅仅是一个例子,说明了为什么原始代码没有编译(没有改变原始代码的结构)其他的回答已经涵盖了为什么(范围和明确的任务),但是你让生活变得艰难
FileStream FS = null;
try
{
FS = new FileStream(this.InFile, FileMode.Open, FileAccess.Read);
return "";
}
catch (FileNotFoundException ex)
{
return ex.Message;
}
finally
{
if (FS != null)
{
FS.Close();
FS.Dispose();
}
}
这是不可编译的,这一事实甚至在原始帖子中也提到过。这段代码与问题中的代码不同。它确实没有编译,但原因不同:因为FS对象没有初始化为null。我会修正密码,但马克的答案是唯一正确的。
try {
using(FileStream FS = new FileStream(
this.InFile, FileMode.Open, FileAccess.Read))
{
return "";
}
} catch (FileNotFoundException ex) {
return ex.Message;
}