public override bool Equals(object obj)
            {
                ModVersionInfo mvi = obj as ModVersionInfo;

                if (mvi == null)
                {
                    return(false);
                }
                if (Major != null && Minor != null && Patch != null)
                {
                    return(Major.Equals(mvi.Major) && Minor.Equals(mvi.Minor) && Patch.Equals(mvi.Patch));
                }
                else if (Major != null && Minor != null)
                {
                    return(Major.Equals(mvi.Major) && Minor.Equals(mvi.Minor));
                }
                else if (Major != null && Patch != null)
                {
                    return(Major.Equals(mvi.Major) && Patch.Equals(mvi.Patch));
                }
                else if (Minor != null && Patch != null)
                {
                    return(Minor.Equals(mvi.Minor) && Patch.Equals(mvi.Patch));
                }
                else if (Major != null)
                {
                    return(Major.Equals(mvi.Major));
                }
                else if (Minor != null)
                {
                    return(Minor.Equals(mvi.Minor));
                }
                else if (Patch != null)
                {
                    return(Patch.Equals(mvi.Patch));
                }
                else
                {
                    return(false);
                }
            }
            public int Compare(ModVersionInfo info)
            {
                if (info == null)
                {
                    return(1);
                }
                int mjrCmp  = String.Compare(Major, info.Major, StringComparison.OrdinalIgnoreCase);
                int mnrCmp  = String.Compare(Minor, info.Minor, StringComparison.OrdinalIgnoreCase);
                int ptchCmp = String.Compare(Patch, info.Patch, StringComparison.OrdinalIgnoreCase);

                if (mjrCmp > 0 || mnrCmp > 0 || ptchCmp > 0)
                {
                    return(1);
                }
                else if (mjrCmp < 0 || mnrCmp < 0 || ptchCmp < 0)
                {
                    return(-1);
                }
                else
                {
                    return(0);
                }
            }