Feedback

Equals für alle DatenTypen (byte[], ….)

Sprache: C#

alle Funktionen besitzen eine .Equals funktion, die jedoch nicht bei allen DatenTypen funktioniert. Hier gibt es schöne Hilfsfunktion um z.B. auch komplette Arrays mit einer Funktion zu vergleichen.
/// <summary>
/// Gibt zurück ob der Inhalt zweier Elemente übereinstimmt
/// </summary>
/// <param name="a">Element a</param>
/// <param name="b">Element b</param>
/// <returns>True bei erfolg</returns>
public static bool EqualContent(object a,object b)
{
	//Falls beide Leer sind
	if (a == null && b==null)
		//Erfolgreich
		return true;

	//Wenn eins von beiden null ist
	if (a == null || b == null)
		//Nicht gleich
		return false;
	
	//Stream für vergleich öffnen
	System.IO.MemoryStream sA = new System.IO.MemoryStream();
	System.IO.MemoryStream sB = new System.IO.MemoryStream();

	//Binär beide Serialisieren
	System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bin = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
	bin.Serialize(sA,a);
	bin.Serialize(sB,b);

	//In Array lesen
	byte[] saB = sA.ToArray();
	byte[] sbB = sB.ToArray();

	//Array vergleichen
	if (saB.Length == sbB.Length)
	{
		for(int i=0;i<saB.Length;i++)
			if (!saB[i].Equals(sbB[i]))
				return false;
	}
	else
	{
		//Länge stimmt schonmal nicht überein
		return false;
	}

	//Jetzt kann es nur noch übereinstimmen ;)
	return true;
}
/// <summary>
/// Gibt zurück ob der Inhalt zweier Elemente übereinstimmt
/// </summary>
/// <param name="a">Element a</param>
/// <param name="b">Element b</param>
/// <returns>True bei erfolg</returns>
public static bool EqualContent(object a,object b)
{
	//Falls beide Leer sind
	if (a == null && b==null)
		//Erfolgreich
		return true;

	//Wenn eins von beiden null ist
	if (a == null || b == null)
		//Nicht gleich
		return false;
	
	//Stream für vergleich öffnen
	System.IO.MemoryStream sA = new System.IO.MemoryStream();
	System.IO.MemoryStream sB = new System.IO.MemoryStream();

	//Binär beide Serialisieren
	System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bin = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
	bin.Serialize(sA,a);
	bin.Serialize(sB,b);

	//In Array lesen
	byte[] saB = sA.ToArray();
	byte[] sbB = sB.ToArray();

	//Array vergleichen
	if (saB.Length == sbB.Length)
	{
		for(int i=0;i<saB.Length;i++)
			if (!saB[i].Equals(sbB[i]))
				return false;
	}
	else
	{
		//Länge stimmt schonmal nicht überein
		return false;
	}

	//Jetzt kann es nur noch übereinstimmen ;)
	return true;
}