161

値がC#の配列にあるかどうかを確認するにはどうすればよいですか?

同様に、プリンター名のリストを含む配列を作成したいと考えています。

これらはメソッドに渡され、メソッドは各文字列を順番に調べ、文字列が配列内の値と同じ場合はそのアクションを実行します。

例えば:

string[] printer = {"jupiter", "neptune", "pangea", "mercury", "sonic"};
foreach (p in printer)
{
   PrinterSetup(p);     
}

これらはプリンターの名前で、PrinterSetup メソッドに渡されます。

PrinterSetup は次のようになります (疑似コード):

public void PrinterSetup(printer)
{
   if (printer == "jupiter") 
   {
      Process.Start("BLAH BLAH CODE TO ADD PRINTER VIA WINDOWS EXEC");
   }
}

if (printer == "jupiter")C# が認識できるようにフォーマットするにはどうすればよいですか?

4

10 に答える 10

312

必要な名前空間を追加する

using System.Linq;

Contains()次に、linqメソッドを使用できます

string[] printer = {"jupiter", "neptune", "pangea", "mercury", "sonic"};
if(printer.Contains("jupiter"))
{
    Process.Start("BLAH BLAH CODE TO ADD PRINTER VIA WINDOWS EXEC"");
}
于 2012-11-06T18:58:15.593 に答える
43
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); // true
Console.WriteLine(b); // false
Console.WriteLine(c); // true
Console.WriteLine(d); // false
于 2014-04-08T06:02:35.600 に答える
36

using System.Linq;ファイルの先頭に追加します。次に、次のことができます。

if ((new [] {"foo", "bar", "baaz"}).Contains("bar"))
{

}  
于 2015-05-21T15:38:55.543 に答える
7

このようなもの?

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"");
    }
}
于 2012-11-06T19:01:18.773 に答える
3

問題が何であるかはあまり明確ではありませんが、次のようなものが必要なようです。

    List<string> printer = new List<string>( new [] { "jupiter", "neptune", "pangea", "mercury", "sonic" } );

    if( printer.Exists( p => p.Equals( "jupiter" ) ) )
    {
        ...
    }
于 2012-11-06T19:02:23.937 に答える
3

メソッドに何かが欠けています:

public void PrinterSetup(string printer)
{
   if (printer == "jupiter") 
   {
      Process.Start("BLAH BLAH CODE TO ADD PRINTER VIA WINDOWS EXEC"");
   }
}

追加するだけstringで大​​丈夫です。

于 2012-11-06T18:59:28.720 に答える
2

ルックアップのパフォーマンスのためにHashSet<T>Classを使用することを検討してください。

このメソッドは O(1) 操作です。

HashSet<T>.Containsメソッド (T)、MSDN

例えば:

class PrinterInstaller
{
    private static readonly HashSet<string> PrinterNames = new HashSet<string>
        {
            "jupiter", "neptune", "pangea", "mercury", "sonic"
        };

    public void Setup(string printerName)
    {
        if (!PrinterNames.Contains(printerName))
        {
            throw new ArgumentException("Unknown printer name", "printerName");
        }
        // ...
    }
}
于 2016-01-20T09:55:11.343 に答える