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

时间:2015-01-05 10:52:58

标签: c# streamreader

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

  
    

example.cs(19,106):警告CS0642:可能出错的空语句

         

example.cs(20,27):错误CS0120:非静态字段,方法或属性需要对象引用System.IO.TextReader.ReadLine()' c:\ Windows \ Microsoft.NET \ Framework \ v4.030319 \ mscorlib.dll :(与先前错误相关的符号位置)

  

我看到了这一点并感到困惑,试图理解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');

               }
        }
 }

1 个答案:

答案 0 :(得分:3)

MSDN在CS0120上并不明确:

  

要使用非静态字段,方法或属性,必须先创建对象实例。

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

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

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