static bool EqualTo(Row r1, Row r2)
{
if (!object.ReferenceEquals(r1, null) && object.ReferenceEquals(r2, null)) return false;
if (object.ReferenceEquals(r1, null) && !object.ReferenceEquals(r2, null)) return false;
if (object.ReferenceEquals(r1, null) && object.ReferenceEquals(r2, null)) return true;
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;
}