public override int Compare(Device device1, Device device2) { if (device1 == null) { throw new ArgumentNullException(nameof(device1)); } if (device2 == null) { throw new ArgumentNullException(nameof(device2)); } int result; switch (sortProperty) { case DeviceProperty.DeviceAddressStr: result = stringComparer.Compare(device1.DeviceAddressStr, device2.DeviceAddressStr); break; case DeviceProperty.DeviceName: result = stringComparer.Compare(device1.DeviceName, device2.DeviceName); break; case DeviceProperty.FirmwareStr: result = stringComparer.Compare(device1.FirmwareStr, device2.FirmwareStr); break; case DeviceProperty.ProductName: result = stringComparer.Compare(device1.ProductName, device2.ProductName); break; default: throw new ApplicationException("Unsupported comparison"); } return(sortDirection == ListSortDirection.Ascending ? result : -result); }