我正在创建用于体验的消息传递服务应用程序。但是,我偶然发现了以前遇到过的错误。这是我的方法:
bool userExists(string pcName)
{
string[] files = Directory.GetFiles(usersFile);
foreach (string fileName in files)
{
if (fileName == pcName)
{
return true;
}
else
{
return false;
}
}
}
如您所见,如果文件夹中存在用户的txt文件,此方法将返回是或否答案。现在,对我来说,所有代码路径都返回一个值。这很有道理,显然编译器不会这么想,因为我在“bool userExists”上收到错误,抱怨并非所有代码路径都返回一个值。我该如何解决这个问题? 谢谢!
答案 0 :(得分:2)
例如,如果列表文件为空,会发生什么? 编译器到达函数的末尾而没有点击return语句,这就是它告诉你的。
编写代码的好方法是:
bool userExists(string pcName)
{
string[] files = Directory.GetFiles(usersFile);
foreach (string fileName in files)
{
if (fileName == pcName)
{
return true;
}
}
return false;
}
这可能是熟悉Linq的时刻:
bool userExists(string pcName)
{
return Directory.GetFiles(usersFile)
.Any(file => file == pcName);
}
答案 1 :(得分:1)
如果files
为空,该怎么办?所以你可以这样做:
string[] files = Directory.GetFiles(usersFile);
foreach (string fileName in files)
{
if (fileName == pcName)
{
return true;
}
}
return false;
答案 2 :(得分:1)
如果您的files
没有文件,该怎么办?
您的代码将跳过foreach
语句,但它不会返回任何内容,因为在您的foreach
语句中,您没有任何return
语句。
string[] files = Directory.GetFiles(usersFile);
foreach (string fileName in files)
{
if (fileName == pcName)
{
return true;
}
}
return false or true;
或者还有其他Linq
方法可以解决;
return Directory.GetFiles(usersFile)
.Where(fileName => fileName == pcName)
.Any();
答案 3 :(得分:0)
bool userExists(string pcName)
{
return Directory
.GetFiles(usersFile)
.Any(fileName => fileName == pcName);
}
答案 4 :(得分:0)
问题是你的“文件”数组可能是空的。如果是这种情况,那么你永远不会遇到布尔返回语句。最终'返回假;'在for ...每个循环之后,你不会再有任何错误。
话虽如此,你的基本逻辑是有缺陷的。通过在else语句中返回false,循环将永远不会继续(假设有多个文件)。
答案 5 :(得分:0)
首先,为什么要使用GetFiles
?请改用EnumerateFiles
。
bool UserExists(string pcName)
{
return Directory.EnumerateFiles(this.usersFile).FirstOrDefault(f => f == pcName);
}
此代码实现了与您的代码等效的功能。
但是,你可能真的想要,
bool UserExists(string pcName)
{
return Directory.EnumerateFiles(this.usersFile).Any(f => f == pcName);
}
枚举将立即开始,无需创建中间数组。如果发现匹配,则可以避免不必要的处理和从磁盘读取。
您可以通过执行
来避免“并非所有代码路径返回值”消息bool userExists(string pcName)
{
string[] files = Directory.GetFiles(usersFile);
return files.Length > 0 && files[0] == pcName;
}
如果您只想检查第一个文件。这处理files
为空的情况。虽然,我怀疑你真的想要,
bool userExists(string pcName)
{
string[] files = Directory.GetFiles(usersFile);
foreach (string fileName in files)
{
if (fileName == pcName)
{
return true;
}
}
return false;
}
检查是否有任何文件。