static bool NotEqualTo(Row r1, Row r2)
{
if (!object.ReferenceEquals(r1, null) && object.ReferenceEquals(r2, null)) return true;
if (object.ReferenceEquals(r1, null) && !object.ReferenceEquals(r2, null)) return true;
if (object.ReferenceEquals(r1, null) && object.ReferenceEquals(r2, null)) return false;
bool uniqueId = r1.Device.UniqueId != r2.Device.UniqueId;
if (r1 != null && r2 != null && r1.Device.Description != null & r2.Device.Description != null)
{
var type = r1.ComparisonType;
switch (type)
{
case DeviceComparisonTypes.CONTROLLER: return uniqueId || r1.Device.Description.Controller != r2.Device.Description.Controller;
case DeviceComparisonTypes.DESCRIPTION: return uniqueId || r1.Device.Description.Description != r2.Device.Description.Description;
case DeviceComparisonTypes.DEVICE_ID: return uniqueId || r1.Device.Description.DeviceId != r2.Device.Description.DeviceId;
case DeviceComparisonTypes.LOCATION: return uniqueId || r1.Device.Description.Location != r2.Device.Description.Location;
case DeviceComparisonTypes.MANUFACTURER: return uniqueId || r1.Device.Description.Manufacturer != r2.Device.Description.Manufacturer;
}
}
return uniqueId && r1.Index == r2.Index;
}