我目前正在编写一些代码来生成一个包含.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');
}
}
}
答案 0 :(得分:3)
MSDN在CS0120上并不明确:
要使用非静态字段,方法或属性,必须先创建对象实例。
您确实创建了一个对象实例sr
,但它仍然无法编译。这是因为您需要在该对象引用上调用该方法(sr.ReadLine()
),而不是在类型(StreamReader.ReadLine()
)上调用该方法。
您的using()
语句以分号(;
)结束,这意味着您不能在该行之后使用它。删除分号并将以下语句括在大括号({ }
)中,以便您可以使用sr
:
using (StreamReader sr = new StreamReader(@"path"))
{
string line = sr.ReadLine();
}