gpt4 book ai didi

c# - string.Split 即使有效也会产生错误

转载 作者:太空宇宙 更新时间:2023-11-03 18:54:51 26 4
gpt4 key购买 nike

所以当我检查是否创建了数组“vetorUtilizadores”时,我有这段代码应该可以工作,但它以某种方式使我的字符串“linha”为空,这给了我一个错误:“对象引用未设置为对象”。这是屏幕截图:https://imgur.com/a/9LK2p (当然是测试数据)

string linha = "";
string login = @"utilizadores.txt";
StreamReader sr = File.OpenText(login);
while(linha != null)
{
linha = sr.ReadLine();
string[] vetorUtilizadores = linha.Split(';');
}

(抱歉,顺便说一下,如果我在这篇文章中做错了什么,对这类论坛来说有点陌生。)

最佳答案

循环中的最后 次,代码首先检查null,但找到了一个值。然后它从文件中读取并将 null 返回到 linha 变量中。接下来它尝试拆分 null 字符串,这会导致您的错误。最后(假设你捕获了异常)它会回到循环的开始 并再次检查 null。这次它将找到 null 并退出循环。

要解决此问题,您需要在检查空值之前读取文件。您可以使用这种模式:

string login = @"utilizadores.txt";
using (StreamReader sr = File.OpenText(login))
{
string linha = sr.ReadLine();
while(linha != null)
{
string[] vetorUtilizadores = linha.Split(';');
linha = sr.ReadLine();
}
}

或者这个模式:

string linha = "";
string login = @"utilizadores.txt";
using (StreamReader sr = File.OpenText(login))
{
while((linha = sr.ReadLine()) != null)
{
string[] vetorUtilizadores = linha.Split(';');
}
}

请注意在 StreamReader 周围添加了 using block 。这真的很重要。

你也可以使用这个模式:

string login = @"utilizadores.txt";
var lines = File.ReadLines(login).Select(linha => linha.Split(';'));

最后一个可能最终会让你编写这样的代码:

bool validAccount = lines.Any(x => x[0] == username && x[1] == password);

真正好的地方是,如果您的用户是列表中的第一个人,则该代码只会从文件中读取第一行。当然,如果它们根本不在列表中,它仍然需要读取整个文件,但至少您有机会节省一些磁盘 I/O。

当然,我假设这是学生代码。没有人真正将用户名/密码列表保存在纯文本文件中。对吧?

关于c# - string.Split 即使有效也会产生错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48118875/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com