.NET 2
string[] myStrings = GetMyStrings();
string test = "testValue";
Comment vérifier si myStrings
contient test
?
Dans .NET 2.0, vous pouvez effectuer les opérations suivantes si vous souhaitez 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); }
);
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 convertir en IList et d’appeler la méthode Contains.
(IList<string> mystrings).Contains(test);
Voici une approche compatible .NET 2.0. Utiliser Array.Find
renverra 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, des efforts supplémentaires sont nécessaires car ils ne prennent pas en charge les délégués anonymes. Au lieu de cela, vous devrez ajouter un Function
et utiliser AddressOf
pour le désigner. Vous devez définir la variable testValue
en tant que membre ou propriété, car elle ne sera pas transmise à la méthode de prédicat. 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
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
}
Je pensais en ajouter un autre, disponible d’abord dans .NET 3.5:
Enumerable.Contains(myStrings.ToArray(), test)
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;
}
Et cela aura la meilleure performance de tous les temps. : P
Voici presque la même question sur msdn . Rechercher une chaîne dans un tableau de chaînes Comme d’autres l'ont déjà dit, vous avez vraiment deux options: 1) Utilisez une liste pour une vérification plus facile. ) Parcourez votre tableau pour trouver la chaîne
vous pouvez utiliser Array.BinarySearch comme décrit ci-dessous.
string[] strArray = GetStringArray();
string strToSearch ="test";
Array.BinarySearch(strArray, strToSearch);
Que dis-tu de ça:
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
Cela devrait fonctionner pour .Net 2.0 et VB.Net.