C# StringReader not“;退出“/打破
我遇到以下代码的问题…当我运行它时,代码永远不会退出。我已经试着调试了大约一个小时,我完全不知道问题是什么。OutputDebug();本质上类似于Console.WriteLine()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
//遍历所有行以查找节
使用(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?当您使用调试器时,您看到了什么?好的,这段代码是您认为存在问题的内容的摘要,但该代码甚至不会运行。您必须向我们展示实际存在您描述的问题的代码。我们不是魔术师,看