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