我遇到了以下代码…的问题当我运行它时,代码永远不会退出。我试着调试了大约一个小时,但我完全不知道问题是什么。OutputDebug();本质上类似于Console.WriteLine();
//Iterate through all lines to find sections
using (StringReader lineReader = new StringReader(Program))
{
int i = 0;
string line = string.Empty;
while (line != null)
{
line = lineReader.ReadLine();
if (line != string.Empty)
{
//If the program is exiting (doExit == true), then break the lööp bröther
if (doExit)
break;
//Iterate through all characters in the line
foreach (char Character in line)
{
i++;
OutputDebug(i.ToString());
if (isOnSameLineAsSectionStart)
{
sectionName += Character;
}
else if (Character == ':' && sectionName == string.Empty)
{
isOnSameLineAsSectionStart = true;
}
else if (Character == ':' && !isOnSameLineAsSectionStart && sectionName != string.Empty)
{
OutputDebug("End of section \"" + sectionName + "\" found");
OutputDebug(linesInSection.Count() + " lines found total in " + sectionName + "\" during section search");
try
{
sections.Add(sectionName, linesInSection);
}
catch (Exception)
{
OutputError("Two/Multiple sections with the same names exist. Ignoring the latest section with the same name");
}
linesInSection = new List<string>();
sectionName = string.Empty;
isOnSameLineAsSectionStart = true;
}
}
if (!isOnSameLineAsSectionStart && sectionName != string.Empty)
{
linesInSection.Add(line);
}
if (isOnSameLineAsSectionStart && sectionName != string.Empty)
{
OutputDebug("Start of section \"" + sectionName + "\" found");
}
if (isOnSameLineAsSectionStart == true)
{
isOnSameLineAsSectionStart = false;
}
}
lineReader.Close();
OutputDebug("In StringReader!" + i);
}提前感谢!
发布于 2018-12-15 03:33:05
您可以使用下面的while方法:
while ((line = reader.ReadLine()) != null)
{
foreach (char Character in line)
{
i++;
OutputDebug(i.ToString());
}
}发布于 2018-12-15 03:32:26
如果你想逐行输出所有的字符。您可以将它们拆分为一个字符串数组:
从here中提取的var lines = Regex.Split(input, "\r\n|\r|\n")。
稍后,使用foreach语句而不是while语句可以解决这个问题:
foreach(string line in lines)
同时将字符串与空值进行比较...看起来不是很好。为什么不使用(内置的) string.IsNullOrEmpty(line)方法检查当前行是否为空?
如果你想使用你的方法,你应该这样做:
while (!string.IsNullOrEmpty(line = reader.ReadLine()))
{
// Your code...
}希望这能有所帮助!
发布于 2018-12-15 04:01:59
由于我们仅限于这段代码,我们只能做一些假设。
lineReader.ReadLine();
如果这是一个阻塞调用,那么只要没有输入,代码就永远不会退出。
如果这是一个非阻塞调用,这意味着即使没有提供输入,它也会返回一些东西。如果在这种情况下返回值是空字符串,那么您将处于无限循环中。
我相信这里的关键函数是ReadLine。
https://stackoverflow.com/questions/53785763
复制相似问题