Sie können die für diesen Zweck verwendete Methode .SequenceEqual
verwenden. Lesen Sie More.
Beispiele unten, wenn die Verbindung aus irgendeinem Grund unterbrochen oder entfernt wurde.
Bestimmt, ob zwei Sequenzen gleich sind, indem die Elemente mithilfe des standardmäßigen Gleichheitsvergleichs für ihren Typ verglichen werden.
Die SequenceEqual (IEnumerable, IEnumerable) Verfahren zählt die beiden Quellsequenzen parallel und vergleicht entsprechende Elemente mit den Standardgleichheitsvergleich für TSource, Standard verwenden. Der Standard-Gleichheitsvergleich, Standard, wird verwendet, um Werte der Typen zu vergleichen, die die generische Schnittstelle IEqualityComparer implementieren. Um einen benutzerdefinierten Datentyp zu vergleichen, müssen Sie diese Schnittstelle implementieren und Ihre eigenen Methoden GetHashCode und Equals für den Typ bereitstellen.
class Pet
{
public string Name { get; set; }
public int Age { get; set; }
}
public static void SequenceEqualEx1()
{
Pet pet1 = new Pet { Name = "Turbo", Age = 2 };
Pet pet2 = new Pet { Name = "Peanut", Age = 8 };
// Create two lists of pets.
List<Pet> pets1 = new List<Pet> { pet1, pet2 };
List<Pet> pets2 = new List<Pet> { pet1, pet2 };
bool equal = pets1.SequenceEqual(pets2);
Console.WriteLine(
"The lists {0} equal.",
equal ? "are" : "are not");
}
/*
This code produces the following output:
The lists are equal.
*/
Wenn Sie die aktuellen Daten der Objekte in den Sequenzen anstatt nur den Vergleich ihrer Referenzen vergleichen wollen, müssen Sie die IEqualityComparer generische Schnittstelle in Ihrer Klasse implementieren. Das folgende Codebeispiel zeigt, wie diese Schnittstelle in einem benutzerdefinierten Datenformat implementiert wird und die Methoden GetHashCode und Equals bereitgestellt werden.
public class Product : IEquatable<Product>
{
public string Name { get; set; }
public int Code { get; set; }
public bool Equals(Product other)
{
//Check whether the compared object is null.
if (Object.ReferenceEquals(other, null)) return false;
//Check whether the compared object references the same data.
if (Object.ReferenceEquals(this, other)) return true;
//Check whether the products' properties are equal.
return Code.Equals(other.Code) && Name.Equals(other.Name);
}
// If Equals() returns true for a pair of objects
// then GetHashCode() must return the same value for these objects.
public override int GetHashCode()
{
//Get hash code for the Name field if it is not null.
int hashProductName = Name == null ? 0 : Name.GetHashCode();
//Get hash code for the Code field.
int hashProductCode = Code.GetHashCode();
//Calculate the hash code for the product.
return hashProductName^hashProductCode;
}
}
Verbrauch:
Product[] storeA = { new Product { Name = "apple", Code = 9 },
new Product { Name = "orange", Code = 4 } };
Product[] storeB = { new Product { Name = "apple", Code = 9 },
new Product { Name = "orange", Code = 4 } };
bool equalAB = storeA.SequenceEqual(storeB);
Console.WriteLine("Equal? " + equalAB);
/*
This code produces the following output:
Equal? True
*/
Mögliches Duplikat [? Gibt es eine integrierte Methode zur Sammlung in C# vergleichen] (http://stackoverflow.com/questions/43500/is- there-a-built-in-method-to-compare-collections-in-c) – Ivan