2015-05-26 5 views
-2

У меня есть метод, чтобы обновить некоторые информацию о клиентахКак сравнить два объекта в C#

public UpdateCustomerInformationResponse UpdateCustomerInformation(UpdateCustomerInformationRequest request) 
{ 
var customer = new Customer 
{ 
    FirstName = request.Customer 
    LastName = request.LastName, 
    MiddleInitial = request.MiddleInitial, 
    CustomerEmail = request.CustomerEmail, 
    UnitNumber = request.UnitNumber, 
} 

Другой объект

var fieldRequired = new FieldRequired{ 
FieldName = "CustomerEmail ", 
IsRequired = 1 
} 

Я хочу, чтобы сравнить 2 объекта, так что я могу узнать, если FieldName " CustomerEmail " присутствует в объекте Customer.

+0

Что вы имеете в виду, если сравнивать? Равенство? Справочное равенство? Больше/меньше? 'CustomerEmail' является свойством, поэтому он всегда * там *, вы хотите проверить, равны ли они? –

+0

Что я хочу, так это то, что check fieldRequired object и на основе значения FieldName (в данном случае CustomerEmail) присваиваю CustomerEmail = request.CustomerEmail, иначе я не – BanTim

ответ

0

Его так просто приятель. Я нашел простое решение, использующее метод отражения и вытеснения, просто следуйте ниже:

Создайте статический класс с именем «CompareTwoObjects» и добавьте к нему код.

public static object CompareEquals(this T objectFromCompare, T objectToCompare)//Generic method 

{ 

if (objectFromCompare == null && objectToCompare == null) 
return true; 
else if (objectFromCompare == null && objectToCompare != null) 
return false; 
else if (objectFromCompare != null && objectToCompare == null) 
return false; 

//Gets all the properties of the class 
PropertyInfo[] props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance); 
foreach (PropertyInfo prop in props) 
{ 
object dataFromCompare = objectFromCompare.GetType().GetProperty(prop.Name).GetValue(objectFromCompare, null); 
object dataToCompare = objectToCompare.GetType().GetProperty(prop.Name).GetValue(objectToCompare, null); 
Type type = objectFromCompare.GetType().GetProperty(prop.Name).GetValue(objectToCompare, null).GetType(); 
if (prop.PropertyType.IsClass && !prop.PropertyType.FullName.Contains("System.String")) 
{ 
dynamic convertedFromValue = Convert.ChangeType(dataFromCompare, type); 
dynamic convertedToValue = Convert.ChangeType(dataToCompare, type); 

object result = CompareTwoObjects.CompareEquals(convertedFromValue, convertedToValue); 

bool compareResult = (bool)result; 
if (!compareResult) 
return false; 
} 


else if (!dataFromCompare.Equals(dataToCompare)) 
return false; 
} 

return true; 


} 

Это даст результат двух объектов, имеющих одинаковые значения.

Использование: - Object1.CompareEquals (Object2);

Если объект класса является сложным, это также сработает. Если вы обнаружили какие-либо вопросы, пожалуйста, отправьте сообщение

0

Ваш вопрос немного расплывчатый. Это то, что вы ищите?

if (fieldRequired.FieldName == "CustomerEmail" && fieldRequired.IsRequired == 1) 
{ 
    CustomerEmail = request.CustomerEmail; 
} 
0

Вы можете реализовать интерфейс IEqualtable, а затем разработать метод Equals с элементами данных, которые вы хотите сравнить. Ниже приведен пример этой реализации:

class Customer: IEquatable<Customer> 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    ... 
public bool Equals(Person other) 
{ 
    return ((FirstName == other.FirstName) && 
    (LastName == other.LastName)); 
} 
} 
Смежные вопросы