C# 比较法的正确实现方法
我试图理解CompareTo方法的正确实现和用法 假设我有Book对象,在代码中的某个地方,我想将新创建的Book对象与数据库中的对象进行比较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
Book newBook = new Book();
Book dbBook = repository.GetBook(1);
所以基本上我要比较两个有多个参数的对象
- 头衔
- 版本
- 语言
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)代码>