实现CompareTo方法的正确方法

时间:2013-12-04 10:43:11

标签: c# .net comparison

我正在尝试理解CompareTo方法的正确实现和用法。

假设我有Book对象和代码中的某处我希望将新创建的book对象与数据库中的对象进行比较。

Book newBook = new Book();
Book dbBook = repository.GetBook(1);

所以基本上我正在尝试比较具有多个参数的两个对象

  • 标题
  • 语言

粗略地说我有以下关注,那么如何实现具有这3个要求的方法呢?

public int CompareTo(object obj)
{
    if(obj is Book)
    {
      Book b = (book)obj;
      var b = Name.ToUpper().CompareTo(b.Name.ToUpper());
    }
    else
    { throw new Exception("Not a book instance"); }

}

1 个答案:

答案 0 :(得分:2)

首先,最好使用泛型,将Book类定义为:

public class Book : IComparable<Book>

然后实现CompareTo方法:

public int CompareTo(Book book)
{
    int result = Title.CompareTo(book.Title);
    if (result == 0)
    {
       result = Edition.CompareTo(book.Edition);
       if (result == 0)
       {
            result = Language.CompareTo(book.Language);
       }
    }

    return result;
}

这当然假设属性TitleEditionLanguage是实现IComparable的类型(例如string)。