![]() |
General Programming »
Algorithms & Recipes »
Diff
Intermediate
License: The Code Project Open License (CPOL)
Compare objects for any change in valueBy Vikramaditya S ShekhawatCompare objects members to the deepest thread for any value change. |
C#, .NET, Architect, Dev
|
||||||||
|
Advanced Search Add to IE Search |
|
|
|
||||||||||||||||
Object comparision is always been a topic of debate. There are lot of ways to implement it, using comparer interface and implement it etc. But there is no generic way, by which two similar object of any type/class can be compared for the change in value of any of the memebers.
Just implement below mentioned methods in a class of your own.
Blocks of code should be set as style "Formatted" like this:
private static string CompareObjects(object initialObj, object currentObj)
{
string returnMessage = string.Empty;
Type type = initialObj.GetType();
Type type2 = currentObj.GetType();
PropertyInfo[] propListInfo = type.GetProperties();
PropertyInfo[] propListInfo1 = type2.GetProperties();
//if class type is native i.e. string,int boolean etc
if (type.IsSealed == true && type.IsGenericType == false)
{
if (!initialObj.Equals(currentObj))
{
returnMessage = "initialObj value :{" + initialObj.ToString() + "},
currentObj value :{" + currentObj.ToString() + "}";
}
}
else //clas type is object
{
//loop through each property of object
for (int count = 0; count < propListInfo.Length; count++)
{
//check if its a indexed object -- special case
if (propListInfo[count].GetGetMethod().GetParameters().Length > 0)
{
// check if not dict object --dict object needs to be addressed
if (count > 1 && type.Name.IndexOf("Dictionary") == -1)
{
int indexersTotal = 0;
//get index of count
for (int tmpCount = 0; tmpCount < propListInfo.Length; tmpCount++)
{
if (propListInfo[tmpCount].Name == "Count")
{
indexersTotal = (int)propListInfo[tmpCount].GetValue(
initialObj, null);
break;
}
}
//indexersTotal = (int)propListInfo[count - 1].GetValue(initialObj, null);
try
{
for (int curIndex = 0; curIndex < indexersTotal; curIndex++)
{
object Obj1 = propListInfo[count].GetValue(initialObj,
new object[] { curIndex });
object Obj2 = propListInfo1[count].GetValue(currentObj,
new object[] { curIndex });
returnMessage = Compare(Obj1, Obj2);
if (returnMessage.Length > 0)
{
return returnMessage + " " + propListInfo[count].ToString();
}
}
}
catch (Exception ex)
{
//consume this error as it is occured becuase of dictionary
//setting collection
string str = ex.Message;
}
}
}
else //not a indexed object
{
object Obj1 = propListInfo[count].GetValue(initialObj, null);
object Obj2 = propListInfo1[count].GetValue(currentObj, null);
returnMessage = Compare(Obj1, Obj2);
if (returnMessage.Length > 0)
{
return returnMessage + " " + propListInfo[count].ToString();
}
}
}
}
public static string Compare(object initialObj, object currentObj)
{
string returnMessage = "";
if (initialObj == null && currentObj != null)
{
returnMessage = "initialObj is Null Object";
}
else if (initialObj != null && currentObj == null)
{
returnMessage = "currentObj is Null Object";
}
else if (initialObj != null && currentObj != null)
{
returnMessage = CompareObjects(initialObj, currentObj);
}
return returnMessage;
}
| You must Sign In to use this message board. | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
General
News
Question
Answer
Joke
Rant
Admin
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 11 Nov 2008 Editor: Sean Ewington |
Copyright 2008 by Vikramaditya S Shekhawat Everything else Copyright © CodeProject, 1999-2009 Web18 | Advertise on the Code Project |