Это зависит от какой платформы.
В GCC это довольно тривиально, см. этот пост для более подробной информации.
В MSVC вы можете использовать библиотеку StackWalker который обрабатывает все базовые вызовы API, необходимые для Windows.
Вам нужно будет найти лучший способ интегрировать эту функциональность в ваше приложение, но количество кода, которое вам нужно написать, должно быть минимальным.
Вы можете использовать SequenceEqual . Это работает для любого IEnumerable
, а не только для массивов.
Используйте SequenceEqual в LINQ .
int[] arr1 = new int[] { 1,2,3};
int[] arr2 = new int[] { 3,2,1 };
Console.WriteLine(arr1.SequenceEqual(arr2)); // false
Console.WriteLine(arr1.Reverse().SequenceEqual(arr2)); // true
Также для массивов (и кортежей) вы можете использовать новые интерфейсы из .NET 4.0: IStructuralComparable and IStructuralEquatable. С их помощью можно не только проверять равенство массивов, но и сравнивать их.
static class StructuralExtensions
{
public static bool StructuralEquals<T>(this T a, T b)
where T : IStructuralEquatable
{
return a.Equals(b, StructuralComparisons.StructuralEqualityComparer);
}
public static int StructuralCompare<T>(this T a, T b)
where T : IStructuralComparable
{
return a.CompareTo(b, StructuralComparisons.StructuralComparer);
}
}
{
var a = new[] { 1, 2, 3 };
var b = new[] { 1, 2, 3 };
Console.WriteLine(a.Equals(b)); // False
Console.WriteLine(a.StructuralEquals(b)); // True
}
{
var a = new[] { 1, 3, 3 };
var b = new[] { 1, 2, 3 };
Console.WriteLine(a.StructuralCompare(b)); // 1
}