运算符重载?

Jas*_*n94 8 c# operators

我已经让自己成为了一个RSS阅读器,它让我保持最新状态,并告诉我新的节目,或者至少是这背后的想法.

我制作了一个结构"SeasonEpisode",它包含两个整数(季节+剧集)和一个覆盖ToString函数.

我存储了本地最新观看的内容,然后我阅读了最新版本来自rss的内容.但是我如何比较SeasonEpisodes呢?现在我采取每个整数并比较它们

if( se1.Season >= se2.Season )
    if( se1.Episode > se2.Episode || se1.Season > se2.Season )
        // new episode!
Run Code Online (Sandbox Code Playgroud)

我真正想要的是

if( se1 > se2 )
    // new episode
Run Code Online (Sandbox Code Playgroud)

我可以得到任何帮助吗?

Dan*_*rth 30

有两种方法:

  1. 实施IComparable<T>和使用CompareTo
  2. 超载大于和小于运营商

我建议你用两种方式:

public class SeasonEpisode : IComparable<SeasonEpisode>
{
    public int CompareTo(SeasonEpisode other)
    {
        if(other == null)
            return 1;
        if(Season == other.Season)
        {
            if(Episode == other.Episode)
                return 0;
            else if(Episode < other.Episode)
                return -1;
            else
                return 1;
        }
        else if(Season < other.Season) 
            return -1;
        else
            return 1;
    }

    public static bool operator <(SeasonEpisode e1, SeasonEpisode e2) 
    {
        return e1.CompareTo(e2) < 0;
    }

    public static bool operator >(SeasonEpisode e1, SeasonEpisode e2) 
    {
        return e1.CompareTo(e2) > 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果“e1”为“null”,运算符将抛出“NullReferenceException”。 (2认同)