C# StringReader not“;退出“/打破

C# StringReader not“;退出“/打破,c#,stringreader,C#,Stringreader,我遇到以下代码的问题…当我运行它时,代码永远不会退出。我已经试着调试了大约一个小时,我完全不知道问题是什么。OutputDebug();本质上类似于Console.WriteLine() //遍历所有行以查找节 使用(StringReader lineReader=新StringReader(程序)) { int i=0; string line=string.Empty; while(行!=null) { line=lineReader.ReadLine(); if(行!=string.Emp

我遇到以下代码的问题…当我运行它时,代码永远不会退出。我已经试着调试了大约一个小时,我完全不知道问题是什么。OutputDebug();本质上类似于Console.WriteLine()

//遍历所有行以查找节
使用(StringReader lineReader=新StringReader(程序))
{
int i=0;
string line=string.Empty;
while(行!=null)
{
line=lineReader.ReadLine();
if(行!=string.Empty)
{
//如果程序正在退出(doExit==true),则中断löp bröther
if(doExit)
打破
//遍历行中的所有字符
foreach(行中的字符)
{
i++;
OutputDebug(i.ToString());
if(isOnSameLineAsSectionStart)
{
sectionName+=字符;
}
else if(Character==':'&§ionName==string.Empty)
{
isOnSameLineAsSectionStart=true;
}
else if(Character==':'&&!isOnSameLineAsSectionStart&§ionName!=string.Empty)
{
OutputDebug(“节末\”+节名+“\”已找到”);
OutputDebug(linesInSection.Count()+“在节搜索期间在“+sectionName+“\”中找到的行总数”);
尝试
{
节。添加(节名称、行节);
}
捕获(例外)
{
OutputError(“存在两个/多个具有相同名称的节。忽略具有相同名称的最新节”);
}
linesInSection=新列表();
sectionName=string.Empty;
isOnSameLineAsSectionStart=true;
}
}
如果(!isonsamelineassessionstart&§ionName!=string.Empty)
{
linesInSection.Add(行);
}
if(isonsamelineassessionstart&§ionName!=string.Empty)
{
OutputDebug(“节的开始\”+节名+”找到“\”);
}
if(isOnSameLineAsSectionStart==true)
{
isOnSameLineAsSectionStart=false;
}
}
lineReader.Close();
OutputDebug(“在StringReader中!”+i);
}

提前感谢!

如果您想逐行输出所有字符,可以将它们拆分为字符串数组:

var lines=Regex.Split(输入“\r\n |\r |\n”)
从中提取

稍后,使用foreach而不是while station,您应该解决问题:

foreach(行中的字符串行)

另外,将字符串与空值进行比较…看起来不太好。为什么不使用(内置)
string.IsNullOrEmpty(line)
方法检查当前行是否为空

如果你想使用你的方法,你应该这样做:

while (!string.IsNullOrEmpty(line = reader.ReadLine()))
{
    // Your code...
}

希望这有帮助!

如果您想逐行输出所有字符,可以将它们拆分为字符串数组:

var lines=Regex.Split(输入“\r\n |\r |\n”)
从中提取

稍后,使用foreach而不是while station,您应该解决问题:

foreach(行中的字符串行)

另外,将字符串与空值进行比较…看起来不太好。为什么不使用(内置)
string.IsNullOrEmpty(line)
方法检查当前行是否为空

如果你想使用你的方法,你应该这样做:

while (!string.IsNullOrEmpty(line = reader.ReadLine()))
{
    // Your code...
}

希望这有帮助!

您可以使用以下方法:

while ((line = reader.ReadLine()) != null)
{
    foreach (char Character in line)
    {
        i++;
        OutputDebug(i.ToString());
    }
}

您可以使用以下while方法:

while ((line = reader.ReadLine()) != null)
{
    foreach (char Character in line)
    {
        i++;
        OutputDebug(i.ToString());
    }
}

由于我们仅限于此片段,我们只能做出假设

lineReader.ReadLine();

如果这是一个阻塞调用,那么只要没有输入,代码可能永远不会退出

如果这是一个取消阻止调用,则意味着即使未提供任何输入,它也会返回一些内容。如果在本例中返回的值为空字符串,则您处于无限循环中


我相信这里的关键功能是
ReadLine

因为我们仅限于此片段,所以我们只能做出假设

lineReader.ReadLine();

如果这是一个阻塞调用,那么只要没有输入,代码可能永远不会退出

如果这是一个取消阻止调用,则意味着即使未提供任何输入,它也会返回一些内容。如果在本例中返回的值为空字符串,则您处于无限循环中


我相信这里的关键函数是
ReadLine

是的,看看
line
变量的内容是什么(您用作
while
循环退出条件的变量)。您注意到什么了吗?
i
从未设置为
null
,因此
while
循环的条件永远不会
true
(并且不会终止)。为什么不
string.IsNullOrEmpty()
method?当您使用调试器时,您看到了什么?好的,这段代码是您认为存在问题的内容的摘要,但该代码甚至不会运行。您必须向我们展示实际存在您描述的问题的代码。我们不是魔术师,看