it-swarm.com.de

string Array.Contains?

.NET 2

string[] myStrings = GetMyStrings();    
string test = "testValue";

Wie kann ich überprüfen, ob myStringstest enthält?

19
serhio

In .NET 2.0 können Sie Folgendes tun, wenn Sie den Index möchten:

int index = Array.FindIndex(
    myStrings,
    delegate(string s) { return s.Equals(test); }
);

index ist -1, wenn myStrings keine test enthält.

Wenn Sie nur auf Existenz prüfen wollen:

bool exists = Array.Exists(
    myStrings,
    delegate(string s) { return s.Equals(test); }
);
18
jason

Ich habe auf der Seite hier eine elegante Antwort gefunden http://www.dotnettoad.com/index.php?/archives/10-Array.Contains.html . Was Sie in .NET 2.0 tun müssen, ist das Umwandeln in IList und das Aufrufen der Contains-Methode.

(IList<string> mystrings).Contains(test);
11
oldbam

Hier ist ein .NET 2.0-kompatibler Ansatz. Die Verwendung von Array.Find gibt Null zurück, wenn der Wert nicht gefunden wird.

C # -Ansatz

string[] myStrings = { "A", "B", "testValue" };
string test = "testValue";
string result = Array.Find(myStrings, delegate(string s) { return s == test; });
Console.WriteLine("Result: " + result);

Wenn Sie eine Groß-/Kleinschreibung benötigen, verwenden Sie s.Equals(test, StringComparison.InvariantCultureIgnoreCase).

EDIT: Mit VB.NET 2.0 ist mehr Aufwand erforderlich, da anonyme Delegierte nicht unterstützt werden. Stattdessen müssen Sie eine Function hinzufügen und mit AddressOf darauf zeigen. Sie müssen die Variable testValue als Mitglied oder Eigenschaft festlegen, da sie nicht an die Vergleichsmethode übergeben wird. Im folgenden Beispiel verwende ich Array.Exists.

VB.NET-Ansatz

' field or property ' 
Dim test As String = "testValue"

Sub Main
    Dim myStrings As String() = { "A", "B", "testValue" }       
    Dim result As Boolean = Array.Exists(myStrings, AddressOf ContainsValue)
    Console.WriteLine(result)
End Sub

' Predicate method '
Private Function ContainsValue(s As String) As Boolean
    Return s = test
End Function
10
Ahmad Mageed

Anstelle eines statischen Arrays können Sie eine Liste verwenden:

List<string> myStrings = new List<string>(GetMyStrings());
if(myStrings.Contains("testValue"))
{
    // Do Work
}
9
Justin Niessner

Ich dachte, ich würde einen weiteren Mix hinzufügen, der in .NET 3.5 verfügbar war.

Enumerable.Contains(myStrings.ToArray(), test)
7
bLiTzJoN
bool ContainsString(string[] arr, string testval)
{
    if ( arr == null )
        return false;
    for ( int i = arr.Length-1; i >= 0; i-- )
        if ( arr[i] == testval )
            return true;
    return false;
}

Und dies wird die beste Leistung aller Zeiten haben. : P

2
Vilx-

Hier ist fast die gleiche Frage zu msdn . Find String in String Array Wie andere bereits gesagt haben, haben Sie zwei Möglichkeiten: ) Durchlaufen Sie Ihr Array, um die Zeichenfolge zu finden

1
Kyle C

sie können Array.BinarySearch wie unten beschrieben verwenden.

 string[] strArray = GetStringArray();
        string strToSearch ="test";
        Array.BinarySearch(strArray, strToSearch);
1
TalentTuner

Wie wäre es damit:

Sub Main
    Dim myStrings(4) As String
    myStrings(0) = "String 1"
    myStrings(1) = "String 2"
    myStrings(2) = "testValue"
    myStrings(3) = "String 3"
    myStrings(4) = "String 4"

    Dim test As String = "testValue"

    Dim isFound As Boolean = Array.IndexOf(myStrings, test) >= 0

    If isFound Then
        Console.WriteLine("Found it!")
    End If
End Sub

Dies sollte für .NET 2.0 und VB.Net funktionieren. 

0
Chris Dunaway