Существует, конечно, много способов сравнения массивов на основе структуры. Чтобы добавить больше к ответам выше, вы можете написать свои собственные пользовательские компараторы. Допустим, вы хотите проверить, содержат ли оба массива четные элементы - вы определяете сравнение на основе бизнес-правил вашего приложения, поэтому оно настолько субъективно.
Вот способ сделать это, написав свой собственный компаратор. Обратите внимание, что метод GetHashCode () не очень заботится, и вы должны в этот момент написать собственную логику равенства, основанную на поведении по умолчанию (сравните ссылочные типы) .equals () даст Вы получите разные результаты, если вы используете другую коллекцию для хранения массивов, и мы говорим, что эти 2 массива содержат четные числа, и поэтому они равны, но мы нарушаем правило, что «Если два значения x и y равны, то они ДОЛЖНЫ иметь тот же хэш-код ". Не беспокойтесь здесь, потому что мы сравниваем целые числа. С этим сказал вот пример:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp5
{
class EvenComparer : EqualityComparer<int>
{
public override bool Equals(int x, int y)
{
if((x % 2 == 0 && y % 2 == 0))
{
return true;
}
return false;
}
public override int GetHashCode(int obj)
{
return obj.GetHashCode();
}
}
class Program
{
static void Main(string[] args)
{
//If you want to check whether the arrays are equal in the sense of containing the same elements in the same order
int[] Array1 = { 2, 4, 6};
int[] Array2 = {8, 10, 12 };
string[] arr1 = { "Jar Jar Binks", "Kill! Kill!", "Aaaaargh!" };
string[] arr2 = { "Jar Jar Binks", "Kill! Kill!", "Aaaaargh!" };
bool areEqual = (arr1 as IStructuralEquatable).Equals(arr2, StringComparer.Ordinal);
bool areEqual2 = (Array1 as IStructuralEquatable).Equals(Array2, new EvenComparer());
Console.WriteLine(areEqual);
Console.WriteLine(areEqual2);
Console.WriteLine(Array1.GetHashCode());
Console.WriteLine(Array2.GetHashCode());
}
}
}
Прочитав ответы, я понимаю, что никто не указал, что вы должны включить
using System.Collections;
Пространство имен, иначе вы получите отсутствующую ссылку на директиву или ссылку на сборку при использовании интерфейса IStructuralEquatable.
Надеюсь, это когда-нибудь кому-нибудь поможет