Я работаю над проектом, написанным на C# и .NET 4.0.Проверка равенства переменных
Существует функция, которая сравнивает определенные свойства двух объектов. Оба объекта одного типа. Рассмотрю следующий класс:
class A
{
public UInt32 Prop1 {get; set;}
public byte Prop2 {get; set;}
public string Prop3 {get; set;}
public int[] Prop4 {get; set;}
}
В моей функции сравнения, я перебор каждого свойства с помощью отражения, и получения значений свойств:
var value1 = t1.GetType().GetProperty(cp.ToString()).GetValue(t1, null);
var value2 = t2.GetType().GetProperty(cp.ToString()).GetValue(t2, null);
где оба t1
и t2
имеют типа A
и cp
является enum
свойств:
enum Properties
{ Prop1, Prop2, Prop3, Prop4 }
Далее я делаю тест на равенство:
if (!value1.Equals(value2))
{
// Handle differences
}
При проверке Prop4
, который возвращает массив, Equals()
всегда возвращает ложь, даже если размер массива и содержание же.
Самый простой способ определить, что возвращаемый тип перечислим, а затем выполнить проверку равенства для отдельных элементов перечислимого?
Я также согласен с Марцином в использовании рефлексии для получения значений свойств, но, опять же, не уверен, какова конечная цель. –
Мне тоже не нравится дизайн, но пока я не смог найти лучшего способа. Я должен реализовать функцию сравнения для двух объектов одного типа. Это не будет полным сравнением пополам. Скорее, нужно сравнить только фиксированное подмножество свойств. Например, класс A имеет 40 свойств, из которых 25 будут включены для сравнения равенств. Это требование. Есть ли лучший способ разработать это? C# не является моим основным языком. – Donotalo
У вас есть код классов? – MarcinJuraszek