La comparaison de deux List<string> pour l'égalité
Autres que parcourant les éléments un par un, comment comparer deux listes de chaînes pour l'égalité (dans l' .NET 3.0):
D'échec:
//Expected result.
List<string> expected = new List<string>();
expected.Add( "a" );
expected.Add( "b" );
expected.Add( "c" );
//Actual result
actual = new List<string>();
actual.Add( "a" );
actual.Add( "b" );
actual.Add( "c" );
//Verdict
Assert.IsTrue( actual == expected );
Vous devez vous connecter pour publier un commentaire.
De nombreux frameworks de test offre une CollectionAssert classe:
E. g MS Test
Essayez ce qui suit
Version De Test
La SequenceEqual méthode d'extension permettra de comparer les éléments de la collection dans le but de l'égalité.
Voir http://msdn.microsoft.com/en-us/library/bb348567(v=vs. 100).aspx
using System.Linq ;
afin d'être en mesure d'utiliser la méthode comme indiqué.Vous pouvez toujours écrire la fonction désirée eux-mêmes:
et de l'utiliser:
if (list1 == null && list2 == null) return true;
etif (list1 == null || list2 == null) return false;
J'ai remarqué que personne n'ai dit que vous pourquoi votre code d'origine n'a pas fonctionné. C'est parce que le
==
opérateur, en général, les tests de référence de l'égalité (c'est à dire si les deux instances sont pointant vers le même objet en mémoire), à moins que l'opérateur a été surchargé.List<T>
ne définit pas un==
opérateur de sorte que la base de référence est égal à la mise en œuvre est utilisée.Que d'autres affiches ont démontré, vous aurez généralement à l'étape à travers des éléments de test "de la collection de l'égalité." Bien sûr, vous devez utiliser l'optimisation suggéré par l'utilisateur Marcheur des rêves qui premiers tests, le nombre de collections avant de pouvoir marcher à travers eux.
Si l'ordre des questions:
Si l'ordre n'a pas d'importance:
Vous pourriez écrire une méthode d'extension de la sorte:
Et de l'appeler de la sorte:
EDIT: mise à Jour du code pour utiliser une méthode statique plutôt que depuis l'OP est l'aide .NET 3.0
Client:
À l'aide de Linq et à écrire le code d'une méthode d'extension :
Alors qu'il n'parcourir la collection, cette extension de la méthode que j'ai créé ne nécessite pas de l'ordre de deux listes de même, et il fonctionne avec les types complexes ainsi, tant que la méthode Equals est remplacée.
Les deux listes de retourner la valeur true:
Méthode:
Il peut être utilisé avec pas de manière régulière mais sans mise en œuvre IEquatable pour les types Personnalisés
Mais dans le cas général, vous pouvez utiliser SequenceEqual comme il a été mentionné dans les commentaires https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.sequenceequal?view=netframework-4.8
Aussi ne pas oublier de mettre en œuvre IEquatable interface pour les types personnalisés (pas nécessaire pour les chaînes de type ou d'une autre structure)