protected static bool Equals(object value1, object value2, DeadbandType deadbandType, double deadband, double range)
{
// check if reference to same object.
if (Object.ReferenceEquals(value1, value2))
{
return true;
}
// check for invalid values.
if (value1 == null || value2 == null)
{
return value1 == value2;
}
// check for type change.
if (value1.GetType() != value2.GetType())
{
return false;
}
// check if values are equal.
if (value1.Equals(value2))
{
return true;
}
// check for arrays.
Array array1 = value1 as Array;
Array array2 = value2 as Array;
if (array1 == null || array2 == null)
{
// nothing more to do if no deadband.
if (deadbandType == DeadbandType.None)
{
return false;
}
// check deadband.
return !ExceedsDeadband(value1, value2, deadbandType, deadband, range);
}
// compare lengths.
if (array1.Length != array2.Length)
{
return false;
}
// compare each element.
bool isVariant = array1.GetType().GetElementType() == typeof(Variant);
for (int ii = 0; ii < array1.Length; ii++)
{
object element1 = array1.GetValue(ii);
object element2 = array2.GetValue(ii);
if (isVariant)
{
element1 = ((Variant)element1).Value;
element2 = ((Variant)element2).Value;
}
if (!Equals(element1, element2, deadbandType, deadband, range))
{
return false;
}
}
// must be equal.
return true;
}