internal static bool CompareNumeric()

in src/PSRule/Common/ExpressionHelpers.cs [62:99]


        internal static bool CompareNumeric(object actual, object expected, bool convert, out int compare, out object value)
        {
            if (TryInt(actual, convert, out var actualInt) && TryInt(expected, convert: true, value: out var expectedInt))
            {
                compare = Comparer<int>.Default.Compare(actualInt, expectedInt);
                value = actualInt;
                return true;
            }
            else if (TryLong(actual, convert, out var actualLong) && TryLong(expected, convert: true, value: out var expectedLong))
            {
                compare = Comparer<long>.Default.Compare(actualLong, expectedLong);
                value = actualLong;
                return true;
            }
            else if (TryFloat(actual, convert, out var actualFloat) && TryFloat(expected, convert: true, value: out var expectedFloat))
            {
                compare = Comparer<float>.Default.Compare(actualFloat, expectedFloat);
                value = actualFloat;
                return true;
            }
            else if (TryDateTime(actual, convert, out var actualDateTime) && TryDateTime(expected, convert: true, value: out var expectedDateTime))
            {
                compare = Comparer<DateTime>.Default.Compare(actualDateTime, expectedDateTime);
                value = actualDateTime;
                return true;
            }
            else if ((TryStringLength(actual, out actualInt) ||
                TryEnumerableLength(actual, out actualInt)) &&
                TryInt(expected, convert: true, value: out expectedInt))
            {
                compare = Comparer<int>.Default.Compare(actualInt, expectedInt);
                value = actualInt;
                return true;
            }
            compare = 0;
            value = 0;
            return false;
        }