我正在使用一本书来学习C#,其中我被要求键入以下代码,但代码中使用的InFile
和OutFile
代码为:
名称" InFile"在当前上下文中不存在。和名字 " OutFile将"在当前背景下不存在。
代码如下:
using System;
using System.IO;
class NumberIt
{
public static void Main(string[] args)
{
if (args.Length <= 0)
{
Console.WriteLine("\nYou need to include a filename.");
}
else
{
StreamReader InFile = null;
StreamWriter OutFile = null;
}
try
{
InFile = File.OpenText(args[0]);
OutFile = File.CreateText("OutFile.txt");
Console.Write("\nNumbering...");
string line = InFile.ReadLine();
int ctr = 1;
while (line != null)
{
OutFile.WriteLine("{0}:{1}", ctr.ToString().PadLeft(3, '0'), line);
Console.Write("..{0}..", ctr.ToString());
ctr++;
line = InFile.ReadLine();
}
}
catch (System.IO.FileNotFoundException)
{
Console.WriteLine("Could not find the file {0}", args[0]);
}
catch (Exception e)
{
Console.WriteLine("Error: {0}", e.Message);
}
finally
{
if (InFile != null)
{
InFile.Close();
OutFile.Close();
Console.WriteLine("...Done");
}
}
}
}
答案 0 :(得分:1)
变量已声明,但在不同的范围内。 A&#39;范围&#39;通常说 - 花括号内的代码。
变量声明不是声明,因此您无法读取代码,如果参数正常,则声明两个变量&#39;。变量声明应该像&#39;这里有两个XY类型的容器,直到范围结束才会知道。&#39;。
所以你的代码应该与此类似。
public static void Main(string[] args)
{
if (args.Length <= 0)
{
Console.WriteLine("\nYou need to include a filename.");
}
else
{
StreamReader InFile = null;
StreamWriter OutFile = null;
try
{
InFile = File.OpenText(args[0]);
OutFile = File.CreateText("OutFile.txt");
Console.Write("\nNumbering...");
...
}
catch ...
{
}
// InFile and OutFile still known here !
}
// InFile and OutFile are unknown here !
希望这能描述其他人已经提到的内容。
答案 1 :(得分:0)
您应该在Main方法的范围内或Main之外声明InFile和Outfile。
class NumberIt
{
// declare them here
public static void Main(string[] args)
{
// or here
...
}
}
答案 2 :(得分:0)
变量InFile和OutFile超出了try / catch块的范围。
将try/catch
块移到其上方的else语句中,因此变量仍然可用。最简单的方法是将}
移到try
之上。