2015-04-14 149 views
0

好吧,我正在学习我学到的所有东西,并试图在C#中实现它。鉴于我在Java中拥有背景知识,目前为止我的工作一直非常顺利,但我遇到了使用Comparer对象和函数等问题。我不关心直接实现/翻译,但我想知道如何C#比较两个通用值。它用什么来排序呢?哈希码,或者一些特定于C#的方法?比较器/排序/可比较的方法和返回值

所以只是为了澄清,我知道如何使用C#中的方法进行排序,搜索等。我想知道的是底下发生了什么 - 使用比较器和其他函数来比较两个泛型的值是什么?

+0

'int CompareTo(object other)':https://msdn.microsoft.com/en-us/library/system.icomparable%28v=vs.110%29.aspx – Mephy

+1

您是否正在使用“generic”作为“对象”的通用术语,还是使用“通用”作为“C#泛型”术语? :)一些示例代码显示了你想要了解的内容可能会有所帮助。 (在编辑你的帖子时,考虑同时删除与你的问题没有直接关系的“你的生活故事”文本)。 –

回答

0

我想知道如何C#比较两个泛型值

它不会/不能,这就是为什么有是ICompariable和的IComparer接口..

什么我想知道引擎盖下是怎么回事

如果你在谈论.Net提供的类型,那么..

如果您有一个已经支持IComparer的类型数组(例如字符串或整数),则可以对该数组进行排序而不提供对IComparer的任何明确引用。在这种情况下,数组元素将转换为IComparer(Comparer.Default)的默认实现。

How to use the IComparable and IComparer interfaces in Visual C#可能是我见过的针对您的问题的最好的文章。

IComparable的的作用是提供比较特定类型

的IComparer的作用是提供附加的比较机制的两个对象的方法。例如,您可能希望在多个字段或属性上提供您的类的排序,在同一字段上升序和降序排列,或者两者都有。

+0

这一切都很好,但我想知道引擎盖下发生了什么。我知道如何使用IComparer/IComparable /各种方法和算法,以及我不知道如何使用的方法。我想最简单的方式来说明它是我想看到它比较时的确切功能。最好的方法就是清楚地看到源代码,但如果我可以在任何地方找到C#源代码,我就会发现它。 – JonMcDev

+0

我提供的链接清楚地说明发生了什么,在某些时候它只是'请注意,IComparer.Compare方法需要三级比较。取决于一个值是否大于,等于或小于另一个,返回1,0或-1。排序顺序(升序或降序)可通过在此方法中切换逻辑运算符进行更改。 –

+0

@JonMcDev https://www.bing.com/search?q=microsoft+reference+source –