I was following example from microsoft site for reading from text file. They say to do it like this:
class Test
{
public static void Main()
{
try
{
using (StreamReader sr = new StreamReader("TestFile.txt"));
{
String line = sr.ReadToEnd();
Console.WriteLine(line);
}
}
catch (Exception e)
{
Console.WriteLine("The file could not be read:");
Console.WriteLine(e.Message);
}
}
}
but when I do it like that in Visual C# 2010 it brings me errors:
Possible mistaken empty statement
The name ‘sr’ does not exist in current context
I removed the using part and now the code looks like this and is working:
try
{
StreamReader sr = new StreamReader("TestFile.txt");
string line = sr.ReadToEnd();
Console.WriteLine(line);
}
Why is that?
Update: there was semicolon at the end of using(....);
I’m only adding this answer because the existing ones (while properly upvoted) just tell you what the error is, not WHY it’s an error.
Doing this;
is actually the same (semantically) as doing this:
The second block (created by the second set of curly braces) doesn’t have anything to do with the
usingblock. Since a variable defined within ausingblock is only in scope within that block, it doesn’t exist (in terms of being in scope and accessible) once your code reaches the second block.You should use the
usingstatement becauseStreamReaderimplementsIDisposable. Theusingblock provides a simple, clean way to ensure that–even in the case of an exception–your resources are properly cleaned up. For more information on theusingblock (and, specifically, what theIDisposableinterface is), see the meta description on theIDisposabletag.