gpt4 book ai didi

c# - 当前上下文中不存在名称 'sr'

转载 作者:行者123 更新时间:2023-11-30 18:49:44 25 4
gpt4 key购买 nike

我正在关注来自 Microsoft site 的示例用于从文本文件中读取。他们说要这样做:

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);
}
}
}

但是当我在 Visual C# 2010 中这样做时,它给我带来了错误:

Possible mistaken empty statement

The name 'sr' does not exist in current context

我删除了 using 部分,现在代码看起来像这样并且可以正常工作:

try
{
StreamReader sr = new StreamReader("TestFile.txt");
string line = sr.ReadToEnd();
Console.WriteLine(line);
}

这是为什么?

更新: using(....);

末尾有分号

最佳答案

你所描述的是通过在using语句之后加上;来实现的

using (StreamReader sr = new StreamReader("TestFile.txt"));
{
String line = sr.ReadToEnd();
Console.WriteLine(line);
}

可能您甚至没有注意到,后来删除了。

使用(StreamReader)和只使用 StreamReader 有什么区别?

当您将一次性变量 (StreamReader) 放在 using 语句中时,它与:

StreamReader sr = new StreamReader("TestFile.txt");
try
{
String line = sr.ReadToEnd();
Console.WriteLine(line);
}
finally
{
// this block will be called even if exception occurs
if (sr != null)
sr.Dispose(); // same as sr.Close();
}

此外,如果您在 using block 中声明变量,它将仅在 using block 中可见。这就是为什么 ; 使您的 StreamReader 在后一种情况下不存在。如果你在使用 block 之前声明sr,它会在后面可见,但是流会被关闭。

关于c# - 当前上下文中不存在名称 'sr',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13369555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com