While循环只在包含4个元素的数组中迭代两次
本文关键字:迭代 两次 数组 循环 包含 元素 4个 While | 更新日期: 2023-09-27 17:49:36
StreamReader sr = new StreamReader(path);
String contents = "LINE";
while (!string.IsNullOrWhiteSpace(contents))
{
contents = sr.ReadLine();
foreach (TSPlayer plr in newPlayers.Keys)
{
if (plr.Name.ToLower() == contents.ToLower() || plr.UserAccountName.ToLower() == contents.ToLower())
{
TShock.Utils.ForceKick(plr, "Bad name. GO AWAY!");
newPlayers.Remove(plr);
}
}
}
sr.Close();
我正在从一个文本文件中读取4行所有包含值(没有空行)。上面的while循环只从文件中读取前两个值,然后停止。
我已经尝试使用一个常规的For循环和一个Foreach循环后分割文件的内容在''n',但同样的事情发生了。
我不知道为什么会这样。我知道肯定数组有4个元素,因为我手动显示的值在索引(例如。内容[2])。因此,从文件中正确读取。
只是当我尝试访问第三个值时它就会停止
谢谢你的帮助,非常感谢。
MSDN显示
返回值类型:系统。字符串
输入流的下一行,如果到达输入流的末尾则为空。
https://msdn.microsoft.com/en-us/library/system.io.streamreader.readline (v = vs.110) . aspx
你所拥有的是
while (!string.IsNullOrWhiteSpace(contents))
{
contents = sr.ReadLine();
如果你的文件的第三行是空格,那么你的循环将退出,它应该是
while (contents != null)
很可能在while (!string.IsNullOrWhiteSpace(contents))
行中存在逻辑问题。我怀疑你有空格
你的代码中也有一个逻辑问题,当你有一个null
或空格时,它必须在退出之前运行一次。
你最好避免这种循环,使用LINQ编写代码。
试试这个:
var lines = new HashSet<string>(
File
.ReadAllLines(path)
.Select(line => line.Trim().ToLower())
.Where(line => !string.IsNullOrWhiteSpace(line)));
var matches =
from plr in newPlayers
let name = plr.Key.Name.ToLower()
let userAccountName = plr.Key.UserAccountName.ToLower()
where lines.Contains(name) || lines.Contains(userAccountName)
select plr.Key;
foreach (var plr in matches.ToArray())
{
TShock.Utils.ForceKick(plr, "Bad name. GO AWAY!");
newPlayers.Remove(plr);
}