我正在创建一个函数,它将从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和史密斯先生建议的代码,我想出了这个:
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;
}
感谢您的帮助!
答案 0 :(得分:1)
听起来reader
对象为null
:
您可以通过执行以下操作检查读者是否为空:
if (reader == null) {
reader = new StreamReader("C:\\FilePath\\File.txt");
}
答案 1 :(得分:1)
没有必要Peek()
,这实际上也可能是问题所在。你可以这样做:
string line = reader.ReadLine();
while (line != null)
{
if (!String.IsNullOrEmpty(line) && !line.StartsWith("//"))
{
count++;
}
line = reader.ReadLine();
}
当然,如果你StreamReader
为null,那么你就会遇到问题,但仅凭示例代码还不足以确定这一点 - 你需要调试它。应该有足够的调试信息来确定哪个对象实际为空
答案 2 :(得分:1)
musefan建议的代码略微更整洁;只需一个ReadLine()代码。 +1表示删除长度检查btw。
private int GetPatchCount(StreamReader reader)
{
int count = 0;
string line;
while ((line = reader.ReadLine()) != null)
if (!String.IsNullOrEmpty(line) && !line.StartsWith("//"))
count++;
return count;
}
答案 3 :(得分:0)
您的代码不足以解决您的问题。基于我的假设,我已经根据VS 2010做了一个小应用程序,它运行良好。我相信你的代码会遇到streamReader的问题。如果streamReader为null,则代码将抛出“对象引用未设置为对象的实例”。 您应该检查streamReader是否为null并确保streamReader可用。
您可以参考下面的代码。确保在D:\中存在TextFile1.txt 希望这有帮助。
namespace ConsoleApplication1
{
using System;
using System.IO;
class Program
{
static void Main(string[] args)
{
using (StreamReader streamReader = new StreamReader(@"D:\\TextFile1.txt"))
{
int count = GetPatchCount(streamReader);
Console.WriteLine("NUmber of // : {0}", count);
}
Console.ReadLine();
}
private static 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;
}
}
}