尝试在 C# 中使用 StreamReader 时尝试了解错误 CS0120

Trying to understand error CS0120 when trying to use StreamReader in C#

我目前正在编写一些代码来生成包含来自 .txt 文件的成绩的图表。我正在尝试使用 StreamReader 来计算字符的频率(例如,如果 .txt 文件包含 ADCBCBBBADEBCCBADBAACDCCBEDCBACCFEABBCBBBCCEAABCBB,我希望它显示 9 个 A、17 个 B、14 个 C、5 个 D、4 个 E 和 1 个 F)。我包括代码,还包括 1 个错误和编译代码时收到的警告:

example.cs(19,106): warning CS0642: Possible mistaken empty statement

example.cs(20,27): error CS0120: An object reference is required for the non-static field, method, or property 'System.IO.TextReader.ReadLine()' c:\Windows\Microsoft.NET\Framework\v4.030319\mscorlib.dll: (location of symbol related to previous error)

我看到了,一头雾水,想去理解MSDN的解释,结果更糊涂了。请有人向我解释我做错了什么并帮助我使我的代码正常工作。谢谢!

`using System;
 using System.IO;
 using System.Linq;

   namespace Assessment2
    {
       class fileAccess
       {
              static void Main(string[] args)
               {    

                using (StreamReader sr = new StreamReader(@"C:\Users\User\Desktop\Grades\grades_single.txt"));
                string line = StreamReader.ReadLine();
                int countOfAs = line.Count(x => x == 'A');

               }
        }
 }

MSDN 在 CS0120 上没有那么明确:

In order to use a non-static field, method, or property, you must first create an object instance.

您确实创建了一个对象实例 sr,但它仍然无法编译。那是因为您需要对该对象引用 (sr.ReadLine()) 调用该方法,而不是对类型(StreamReader.ReadLine()) 调用该方法。

您的 using() 语句以分号 (;) 结束,这意味着您不能在该行之后使用它。删除分号并将以下语句括在大括号 ({ }) 中,这样就可以使用 sr:

using (StreamReader sr = new StreamReader(@"path"))
{
    string line = sr.ReadLine();
}