Cec*_*uez 90 .net c# arrays string
如何检查C#中的值是否在数组中?
就像,我想创建一个包含打印机名称列表的数组.
这些将被提供给一个方法,该方法将依次查看每个字符串,如果字符串与数组中的值相同,则执行该操作.
例如:
string[] printer = {"jupiter", "neptune", "pangea", "mercury", "sonic"};
foreach (p in printer)
{
PrinterSetup(p);
}
Run Code Online (Sandbox Code Playgroud)
这些是打印机的名称,它们被送到PrinterSetup方法.
PrinterSetup看起来有点像这样(一些伪代码):
public void PrinterSetup(printer)
{
if (printer == "jupiter")
{
Process.Start("BLAH BLAH CODE TO ADD PRINTER VIA WINDOWS EXEC");
}
}
Run Code Online (Sandbox Code Playgroud)
如何if (printer == "jupiter")
以C#可识别的方式格式化?
Dmy*_*tro 198
添加必要命名空间
using System.Linq;
Run Code Online (Sandbox Code Playgroud)
然后你可以使用linq Contains()
方法
string[] printer = {"jupiter", "neptune", "pangea", "mercury", "sonic"};
if(printer.Contains("jupiter"))
{
Process.Start("BLAH BLAH CODE TO ADD PRINTER VIA WINDOWS EXEC"");
}
Run Code Online (Sandbox Code Playgroud)
小智 24
string[] array = { "cat", "dot", "perls" };
// Use Array.Exists in different ways.
bool a = Array.Exists(array, element => element == "perls");
bool b = Array.Exists(array, element => element == "python");
bool c = Array.Exists(array, element => element.StartsWith("d"));
bool d = Array.Exists(array, element => element.StartsWith("x"));
// Display bools.
Console.WriteLine(a);
Console.WriteLine(b);
Console.WriteLine(c);
Console.WriteLine(d);
----------------------------output-----------------------------------
Run Code Online (Sandbox Code Playgroud)
1)真2)假3)真4)假
小智 19
if ((new [] {"foo", "bar", "baaz"}).Contains("bar"))
{
}
Run Code Online (Sandbox Code Playgroud)
像这样的东西?
string[] printer = {"jupiter", "neptune", "pangea", "mercury", "sonic"};
PrinterSetup(printer);
// redefine PrinterSetup this way:
public void PrinterSetup(string[] printer)
{
foreach (p in printer.Where(c => c == "jupiter"))
{
Process.Start("BLAH BLAH CODE TO ADD PRINTER VIA WINDOWS EXEC"");
}
}
Run Code Online (Sandbox Code Playgroud)
注意:问题是关于字符串数组。上述例程不能与单个字符串的 .Contains 方法混合使用。
我想添加一个涉及不同 C# 版本的扩展答案,原因有两个:
接受的答案需要 Linq,它是完全惯用的 C#,但它并非没有成本,并且在 C# 2.0 或更低版本中不可用。当涉及数组时,性能可能很重要,因此在某些情况下您希望使用 Array 方法。
没有答案直接涉及还要求将其放入函数的问题(因为有些答案也将字符串与字符串数组混合,这并非完全不重要)。
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");
}
}
Run Code Online (Sandbox Code Playgroud)
您可以编写自己的扩展方法(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));
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,使用此ArrayContains()
方法而不是 Linq 的 Contains 方法。
其他地方提到的 .Contains 方法是指List<T>.Contains
(自 C# 2.0 起)或ArrayList.Contains
(自 C# 1.1 起),但不直接指代数组本身。
public static bool Contains(Array a, object val)
{
return Array.IndexOf(a, val) != -1;
}
Run Code Online (Sandbox Code Playgroud)