注意:问题是关于字符串数组的。上述例程不能与单个字符串的 .Contains 方法混用。
我想添加一个关于不同 C# 版本的扩展答案,原因有两个:
Array.Exists() 是 C#/.NET 2.0 方法,不需要 Linq。在数组中搜索是 O(n)。为了更快地访问,请使用 HashSet 或类似的集合。
由于 .NET 3.5 还存在一个通用方法Array<T>.Exists()
:
public void PrinterSetup(string[] printer)
{
if (Array.Exists(printer, x => x == "jupiter"))
{
Process.Start("BLAH BLAH CODE TO ADD PRINTER VIA WINDOWS EXEC");
}
}
您可以编写自己的扩展方法(C# 3.0 及更高版本)来添加语法糖以获得与所有数组的字符串相同/相似的“.Contains”,而不包括 Linq:
// Using the generic extension method below as requested.
public void PrinterSetup(string[] printer)
{
if (printer.ArrayContains("jupiter"))
{
Process.Start("BLAH BLAH CODE TO ADD PRINTER VIA WINDOWS EXEC");
}
}
public static bool ArrayContains<T>(this T[] thisArray, T searchElement)
{
// If you want this to find "null" values, you could change the code here
return Array.Exists<T>(thisArray, x => x.Equals(searchElement));
}
在这种情况下,使用此ArrayContains()
方法而不是 Linq 的 Contains 方法。
其他地方提到的 .Contains 方法是指List<T>.Contains
(自 C# 2.0 起)或ArrayList.Contains
(自 C# 1.1 起),但不直接指向数组本身。