【问题标题】:Trying to understand error CS0120 when trying to use StreamReader in C# [closed]尝试在 C# 中使用 StreamReader 时尝试理解错误 CS0120 [关闭]
【发布时间】:2015-01-05 10:52:58
【问题描述】:

我目前正在编写一些代码来生成带有 .txt 文件中成绩的图表。我正在尝试使用 StreamReader 来计算字符的频率(例如,如果 .txt 文件包含 ADCBCBBBADEBCCBADBAACDCCBEDCBACCFEABBCBBBCCEAABCBB,我希望它说 9 A、17 B、14 C、5 D、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');

               }
        }
 }

【问题讨论】:

  • 使用实例,即:string line = sr.ReadLine();
  • 您的代码中有错字。除掉 ;在使用行的末尾。然后将代码用大括号括起来,下次尽量不要盲目跟从前面问题中的cmets
  • 您的代码无法编译..

标签: c# streamreader


【解决方案1】:

MSDN 在CS0120 上没有那么明确:

为了使用非静态字段、方法或属性,您必须首先创建一个对象实例。

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

您的 using() 语句以分号 (;) 结尾,这意味着您不能在该行之后使用它。去掉分号,把下面的语句用大括号({ })括起来,这样就可以使用sr了:

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

【讨论】:

  • 工作就像一个魅力,非常感谢你的帮助,我终于可以完成这个了:P哈哈!
猜你喜欢
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 2021-03-31
  • 2017-05-15
  • 1970-01-01
  • 1970-01-01
  • 2020-01-17
  • 2012-06-07
相关资源
最近更新 更多