C# 比较法的正确实现方法

C# 比较法的正确实现方法,c#,.net,comparison,C#,.net,Comparison,我试图理解CompareTo方法的正确实现和用法 假设我有Book对象,在代码中的某个地方,我想将新创建的Book对象与数据库中的对象进行比较 Book newBook = new Book(); Book dbBook = repository.GetBook(1); 所以基本上我要比较两个有多个参数的对象 头衔 版本 语言 大致上我有以下几个问题,那么您将如何实现具有这3个要求的方法呢 public int CompareTo(object obj) { if(obj is B

我试图理解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"); }

}

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

public class Book : IComparable<Book>

当然,这假设属性
Title
Edition
Language
属于实现
可比较的
类型(例如
字符串
)。

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

public class Book : IComparable<Book>

当然,这假设属性
Title
Edition
Language
属于实现
可比较的
类型(例如
字符串
)。

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

public class Book : IComparable<Book>

当然,这假设属性
Title
Edition
Language
属于实现
可比较的
类型(例如
字符串
)。

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

public class Book : IComparable<Book>

当然,这假设属性
Title
Edition
Language
属于实现
可比较的
(例如
字符串
)的类型。

CompareTo
旨在为该类型的对象提供排序,这意味着书A可能比书B“小”。如何定义“较小”是指书籍吗?@Jon,它不是指“较小”,而是指“订购时先到”。所以OP的意思是,要对书籍进行排序,必须先按标题排序,然后按版本排序,最后按语言排序。@RoyDictus:这正是“较小”的意思“在引号中是指;该术语是广义的,即。此外,在我看来,这个问题并没有明确指定您描述的排序关系,而不是假设我这样问。似乎您希望按照该顺序比较{按标题、按版本、按语言},这是OP列出字段的顺序。
CompareTo
旨在为该类型的对象提供排序,这意味着书A可能比书B“小”。你如何定义书的“小”呢?@Jon,它不是指“小”,它的意思是“订购时先到”。所以OP的意思是,要对书籍进行排序,必须先按标题排序,然后按版本排序,最后按语言排序。@RoyDictus:这正是引号中“较小”的意思;该术语是广义的,即。此外,在我看来,这个问题并没有明确指定您描述的排序关系,而不是假设我这样问。似乎您希望按照该顺序比较{按标题、按版本、按语言},这是OP列出字段的顺序。
CompareTo
旨在为该类型的对象提供排序,这意味着书A可能比书B“小”。你如何定义书的“小”呢?@Jon,它不是指“小”,它的意思是“订购时先到”。所以OP的意思是,要对书籍进行排序,必须先按标题排序,然后按版本排序,最后按语言排序。@RoyDictus:这正是引号中“较小”的意思;该术语是广义的,即。此外,在我看来,这个问题并没有明确指定您描述的排序关系,而不是假设我这样问。似乎您希望按照该顺序比较{按标题、按版本、按语言},这是OP列出字段的顺序。
CompareTo
旨在为该类型的对象提供排序,这意味着书A可能比书B“小”。你如何定义书的“小”呢?@Jon,它不是指“小”,它的意思是“订购时先到”。所以OP的意思是,要对书籍进行排序,必须先按标题排序,然后按版本排序,最后按语言排序。@RoyDictus:这正是引号中“较小”的意思;该术语是广义的,即。此外,在我看来,这个问题并没有明确指定您所描述的排序关系,而不是假设我这样问。似乎您希望按照该顺序比较{按标题、按版本、按语言},这是OP列出字段的顺序。OP似乎希望忽略大小写(注意他使用的
ToUpper()
)因此,比较最好是:
intresult=string.Compare(this.Title,book.Title,ignoreCase:true)
OP似乎想忽略大小写(注意他使用了
ToUpper()
),所以比较可能最好是:
int result=string.Compare(this.Title,book.Title,ignoreCase:true)
OP似乎想忽略大小写(注意他使用了
ToUpper()
),所以比较可能最好是:
int result=string.Compare(this.Title,book.Title,ignoreCase:true)
OP似乎想忽略大小写(注意他使用了
ToUpper()
),所以比较可能最好是:
int result=string.Compare(this.Title,book.Title,ignoreCase:true)