Example #1
0
            public int CompareTo(VersionEx value)
            {
                if (value == null)
                {
                    throw new ArgumentNullException(nameof(value));
                }

                if (Major != value.Major)
                {
                    if (Major > value.Major)
                    {
                        return(1);
                    }
                    else
                    {
                        return(-1);
                    }
                }

                if (Minor != value.Minor)
                {
                    if (Minor > value.Minor)
                    {
                        return(1);
                    }
                    else
                    {
                        return(-1);
                    }
                }

                if (Build != value.Build)
                {
                    if (Build > value.Build)
                    {
                        return(1);
                    }
                    else
                    {
                        return(-1);
                    }
                }

                if (Revision != value.Revision)
                {
                    if (Revision > value.Revision)
                    {
                        return(1);
                    }
                    else
                    {
                        return(-1);
                    }
                }

                return(0);
            }
Example #2
0
        /// <summary>
        /// Compare string, which would be number
        /// </summary>
        public static CompareStringNumberResult CompareStringNumber(string str1, string str2, bool ignoreCase = true)
        {
            // Try version number compare
            VersionEx v1 = VersionEx.Parse(str1);
            VersionEx v2 = VersionEx.Parse(str2);

            if (v1 != null && v2 != null)
            {
                int comp = v1.CompareTo(v2);
                if (comp < 0)
                {
                    return(CompareStringNumberResult.Smaller);
                }
                else if (comp == 0)
                {
                    return(CompareStringNumberResult.Equal);
                }
                else
                {
                    return(CompareStringNumberResult.Bigger);
                }
            }

            // Do simple number or string compare
            ParseStringToNumberType type1 = ParseStringToNumber(str1, out long z1, out decimal r1);
            ParseStringToNumberType type2 = ParseStringToNumber(str2, out long z2, out decimal r2);

            if (type1 == ParseStringToNumberType.Integer && type2 == ParseStringToNumberType.Integer)
            { // Args are both int
                long comp = z1 - z2;
                if (comp < 0)
                {
                    return(CompareStringNumberResult.Smaller);
                }
                else if (comp == 0)
                {
                    return(CompareStringNumberResult.Equal);
                }
                else
                {
                    return(CompareStringNumberResult.Bigger);
                }
            }

            if (type1 == ParseStringToNumberType.Integer && type2 == ParseStringToNumberType.Decimal ||
                type1 == ParseStringToNumberType.Decimal && type2 == ParseStringToNumberType.Integer ||
                type1 == ParseStringToNumberType.Decimal && type2 == ParseStringToNumberType.Decimal)
            { // One arg is decimal
                decimal comp = r1 - r2;
                if (comp < 0)
                {
                    return(CompareStringNumberResult.Smaller);
                }
                else if (comp == 0)
                {
                    return(CompareStringNumberResult.Equal);
                }
                else
                {
                    return(CompareStringNumberResult.Bigger);
                }
            }

            // if (type1 == ParseStringToNumberType.String || type2 == ParseStringToNumberType.String)
            // One of arg is string, so just compare
            StringComparison compOpt = StringComparison.Ordinal;

            if (ignoreCase)
            {
                compOpt = StringComparison.OrdinalIgnoreCase;
            }

            if (str1.Equals(str2, compOpt))
            {
                return(CompareStringNumberResult.Equal);
            }
            else
            {
                return(CompareStringNumberResult.NotEqual);
            }
        }