我正在创建一个函数,它将从 StreamReader 获取行数,不包括注释(以“//”开头的行)和新行。
这是我的代码:
private int GetPatchCount(StreamReader reader)
{
int count = 0;
while (reader.Peek() >= 0)
{
string line = reader.ReadLine();
if (!String.IsNullOrEmpty(line))
{
if ((line.Length > 1) && (!line.StartsWith("//")))
{
count++;
}
}
}
return count;
}
我的 StreamReader 的数据是:
// Test comment
但我收到一个错误,“未将对象引用设置为对象的实例。”有什么办法可以解决这个错误吗?
编辑
事实证明,当我的 StreamReader 为 null 时会发生这种情况。因此,使用 musefan 和 Smith 先生建议的代码,我想出了这个:
private int GetPatchCount(StreamReader reader, int CurrentVersion)
{
int count = 0;
if (reader != null)
{
string line;
while ((line = reader.ReadLine()) != null)
if (!String.IsNullOrEmpty(line) && !line.StartsWith("//"))
count++;
}
return count;
}
谢谢您的帮助!
最佳答案
不需要 Peek()
,这实际上也可能是问题所在。你可以这样做:
string line = reader.ReadLine();
while (line != null)
{
if (!String.IsNullOrEmpty(line) && !line.StartsWith("//"))
{
count++;
}
line = reader.ReadLine();
}
当然,如果您的
StreamReader
为空,那么您就有问题,但是仅凭示例代码不足以确定这一点 - 您需要对其进行调试。应该有大量调试信息供您确定哪个对象实际上为空关于c# - StreamReader NullReferenceException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16150606/