20 votes

string array.Contains ?

.NET 2

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

Comment puis-je vérifier si myStrings contient test ?

19voto

Jason Points 125291

En .NET 2.0, vous pouviez faire ce qui suit si vous vouliez l'index :

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

index sera -1 si myStrings ne contient pas test .

Si vous voulez simplement vérifier l'existence :

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

11voto

oldbam Points 276

J'ai trouvé une réponse élégante à la page ici http://www.dotnettoad.com/index.php?/archives/10-Array.Contains.html . Ce que vous devez faire dans .NET 2.0 est de faire un cast vers IList et d'appeler la méthode Contains.

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

10voto

Ahmad Mageed Points 44495

Voici une approche conforme à la norme .NET 2.0. Utilisation de Array.Find retournera null si la valeur n'est pas trouvée.

Approche C#

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

Si vous avez besoin d'une correspondance insensible à la casse, utilisez s.Equals(test, StringComparison.InvariantCultureIgnoreCase) .

EDIT : Avec VB.NET 2.0, un effort supplémentaire est nécessaire car il ne prend pas en charge les délégués anonymes. Au lieu de cela, vous devez ajouter un Function et utiliser AddressOf pour l'indiquer. Vous devez définir l'option testValue en tant que membre ou propriété puisqu'il ne sera pas transmis à la méthode de prédiction. Dans l'exemple suivant, j'utilise Array.Exists .

Approche VB.NET

' 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

9voto

Justin Niessner Points 144953

Au lieu d'utiliser un tableau statique, vous pouvez utiliser une liste :

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

8voto

bLiTzJoN Points 41

J'ai pensé en ajouter une autre au mélange, disponible pour la première fois dans .NET 3.5, je crois :

Enumerable.Contains(myStrings.ToArray(), test)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X