array. exist()只识别数组的最后一个元素
本文关键字:数组 最后一个 元素 识别 exist array | 更新日期: 2023-09-27 17:49:01
如果这是一个明显的答案,我很抱歉,但我在StackOverflow和Google上找不到任何与此行为相关的内容。我自学c#,正在编写一个涉及使用用户名/密码对的程序。在本例中,我使用.Exist()
来确定用户名是否已经在我的用户名数组中。
static bool LookUpS(string targ, string[] arr)
{
if (Array.Exists(arr, e => e == targ))
{
return true;
}
else
{
return false;
}
}
参数targ
来自用户,参数arr
被写入程序以指定应该搜索哪个数组(这样我就可以在不同的数组上使用LookUpS
)。我现在测试的数组来自一个文本文档。我已经测试了,以确认从.txt到数组的转换是正常工作的。
现在讨论实际问题。我用几个值填充了文本文档:"木星"、"海王星"、"土星"、"火星"。如果我将前三个中的任何一个传递给LookUpS
,它将返回false
,尽管它们确实存在。然而,我不明白的部分是,如果我将"Mars"(或任何最后一个值)传递到函数中,它会像它应该的那样返回true
。如果我要删除"火星"值,LookUpS
会说"土星"是true
,而不是其他的。有人能解释一下吗?如果能帮助你找出问题所在,我可以把程序的更完整的图片贴出来。
在评论中,您提到使用'n作为分隔符分隔行。但是在Windows上使用'r'n。因此分割字符串数组将包含
- xxxx ' r
- yyyy ' r
- lastUser
最后一行不包含换行符
这解释了为什么在数组中搜索只能找到数组中的最后一个用户。传递给拆分操作不是'r,而是Environment.NewLine.ToCharArray()来删除字符串数组中的所有换行字符。
数组有一个叫做contains()
的内置方法,它应该做你想做的事情…
string[] array = { "Jupiter", "Neptune", "Saturn", "Mars" };
if (array.Contains("Neptune")) {
return true;
}
您可以将其简化为这样的内容。如果您愿意,可以使用Exists()代替Any()。
static bool LookUpS(string targ, string[] arr)
{
return (arr.Any(s => s == targ))
}
或者如果您希望它不区分大小写:
static bool LookUpS(string targ, string[] arr)
{
return (arr.Any(e => String.Equals(e, targ, StringComparison.CurrentCultureIgnoreCase));
}
或者,正如Karl建议的,您可以使用Contains()
static bool LookUpS(string targ, string[] arr)
{
return (arr.Contains(targ);
}
有时简化代码可以解决一些问题:)
您不需要使用if .. else
来返回true
或false
的原因是Any(), Exists()和Contains()返回的方法是bool,因此您可以只返回方法调用,如示例