in edge-hub/core/src/Microsoft.Azure.Devices.Routing.Core/query/types/QueryValue.cs [219:267]
static int Compare(QueryValue value1, QueryValue value2)
{
if (value2 == null)
{
return 1;
}
Debug.Assert(value1 != null, nameof(value1) + " != null");
// ReSharper disable once PossibleNullReferenceException
if (value1.ValueType == QueryValueType.None || value2.ValueType == QueryValueType.None)
{
return ReferenceEquals(value1, value2) ? -1 : value1.GetHashCode().CompareTo(value2.GetHashCode());
}
if (value1.ValueType != value2.ValueType)
{
return value1.ValueType.CompareTo(value2.ValueType);
}
switch (value1.ValueType)
{
case QueryValueType.Bool:
return ((Bool)value1.Value).CompareTo((Bool)value2.Value);
case QueryValueType.String:
return string.Compare((string)value1.Value, (string)value2.Value, StringComparison.Ordinal);
case QueryValueType.Double:
double v1 = Convert.ToDouble(value1.Value);
double v2 = Convert.ToDouble(value2.Value);
return v1.CompareTo(v2);
case QueryValueType.Null:
return 0;
case QueryValueType.Object:
// We do not support value based comparisons on object. Just return based on reference equals.
return ReferenceEquals(value1.Value, value2.Value) ? 0 : value1.Value.GetHashCode().CompareTo(value2.Value.GetHashCode());
default:
throw new ArgumentOutOfRangeException();
}
}