static int Compare()

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();
            }
        }