Example #1
0
        /// <summary>
        /// Compares this instance with a specified <see cref="MusicNote"/> and
        /// indicates whether this instance precedes, follows, or appears in
        /// the same position in the sort order as the specified
        /// <see cref="MusicNote"/>.
        /// </summary>
        /// <param name="targetMusicNote">
        /// The <see cref="MusicNote"/> to compare, or null.
        /// </param>
        /// <returns>
        /// An <see cref="int"/> that indicates whether this instance precedes,
        /// follows, or appears in the same position in the sort order as the
        /// <paramref name="targetMusicNote"/> parameter. Less than zero
        /// indicates that this instance precedes
        /// <paramref name="targetMusicNote"/>. Zero indicates that this
        /// instance has the same position in the sort order as
        /// <paramref name="targetMusicNote"/>. Greater than zero indicates
        /// that this instance follows <paramref name="targetMusicNote"/> or
        /// that <paramref name="targetMusicNote"/> is null.
        /// </returns>
        public int CompareTo(MusicNote targetMusicNote)
        {
            if (targetMusicNote == null)
            {
                return(1);
            }

            if (HasOctave() && targetMusicNote.HasOctave())
            {
                if (Octave == targetMusicNote.Octave)
                {
                    return(Value.CompareTo(targetMusicNote.Value));
                }
                else
                {
                    return(((int)Octave).CompareTo((int)targetMusicNote.Octave));
                }
            }
            else if (!HasOctave() && !targetMusicNote.HasOctave())
            {
                return(Value.CompareTo(targetMusicNote.Value));
            }
            else
            {
                if (!HasOctave() && targetMusicNote.HasOctave())
                {
                    //Octaveless MusicNotes precede MusicNotes that have octaves.
                    return(-1);
                }
                else
                {
                    //MusicNotes that have octaves follow octaveless MusicNotes.
                    return(1);
                }
            }
        }