我正在创建一个函数,它将从 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/

10-13 06:22