C# 是否可以确定字符串是否位于一行中字符串数组的任何位置?

C# 是否可以确定字符串是否位于一行中字符串数组的任何位置?,c#,string,loops,C#,String,Loops,我有一个循环代码来确定字符串数组中是否存在字符串: private bool OneOfTheAustralianWords(string _whirred) { string[] australian100 = File.ReadAllLines(@"C:\PlatypiRUs.txt", Encoding.UTF8); foreach (string whirred in australian100) { if (whirred.Trim().ToUp

我有一个循环代码来确定字符串数组中是否存在字符串:

private bool OneOfTheAustralianWords(string _whirred)
{
    string[] australian100 = File.ReadAllLines(@"C:\PlatypiRUs.txt", Encoding.UTF8);
    foreach (string whirred in australian100)
    {
        if (whirred.Trim().ToUpper() == _whirred.Trim().ToUpper()) return true;
    }
    return false;
}
有更简单/更有效的方法吗?

试试:

return File.ReadAllLines(@"C:\PlatypiRUs.txt", Encoding.UTF8)
    .Any(l => l.Trim().ToUpper() == _whirred.Trim().ToUpper());
此外,我还建议为
\u whirred.Trim().ToUpper()
引入变量,并使用它返回可枚举(如所建议的)和
StringComparison.CurrentCultureIgnoreCase
不将文件中的字符串大写:

var searched = _whirred.Trim();
return File.ReadLines(@"C:\PlatypiRUs.txt", Encoding.UTF8)
        .Any(l => l.Trim().Equals(searched, StringComparison.CurrentCultureIgnoreCase));

File.ReadLines
不是比
File.ReadAllLines
更高效吗?更简单吗?对更有效率?不是真的。您至少可以在开始之前修剪
\u whirred
,而不是对每一行重复。还可以尝试使用不区分大小写的字符串比较,而不是
ToUpper
。这不仅更加正确(在某些语言中,
ToUpper
技巧不起作用),而且还可以避免创建额外的临时字符串。对于第二个版本:您不需要将
whirred
转换为大写。@Vilx-同意。忘记删除。效率是一件棘手的事情。如果文件很小,一次读取内存中的所有文件是最有效的。如果它很大,您将希望将其分块处理,否则您将耗尽RAM并开始交换。最有效的方法可能是内存映射文件,但在C#中,这是很难做到的,尤其是在这个任务中。代码会变得非常复杂,所以如果你在每一个可能的性能之后都是值得考虑的(在这种情况下,你可能会考虑C++)。