Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 比较器/排序/均衡方法和返回值_C#_Sorting_Compare_Iequalitycomparer - Fatal编程技术网

C# 比较器/排序/均衡方法和返回值

C# 比较器/排序/均衡方法和返回值,c#,sorting,compare,iequalitycomparer,C#,Sorting,Compare,Iequalitycomparer,好吧,我将学习所有知识,并尝试用C#实现它。考虑到我有Java的背景,到目前为止,我的工作相当顺利,但在使用Comparer对象和函数等方面遇到了问题。我不关心直接实现/转换,但我想知道C#如何比较两个通用值。它使用什么对它们进行排序?Hashcode,或者一些特定于C的方法 因此,为了澄清,我知道如何使用C#中的方法进行排序、搜索等。我想知道的是引擎盖下发生了什么-比较器和其他函数使用什么来比较泛型的两个值 我想知道C#如何比较两个通用值 它不能/不能,这就是为什么有ICompariable和

好吧,我将学习所有知识,并尝试用C#实现它。考虑到我有Java的背景,到目前为止,我的工作相当顺利,但在使用Comparer对象和函数等方面遇到了问题。我不关心直接实现/转换,但我想知道C#如何比较两个通用值。它使用什么对它们进行排序?Hashcode,或者一些特定于C的方法

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

我想知道C#如何比较两个通用值

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

我想知道的是引擎盖下发生了什么

如果您谈论的是.Net提供的类型,那么

如果您有一个已支持IComparer的类型数组(如字符串或整数),则可以对该数组进行排序,而无需向IComparer提供任何显式引用。在这种情况下,数组的元素被强制转换为IComparer的默认实现(Comparer.default)

这可能是我看过的针对你问题的最好的文章

IComparable的作用是提供一种比较两个特定类型对象的方法

IComparer的作用是提供额外的比较机制。例如,您可能希望提供类在多个字段或属性上的顺序、在同一字段上的升序和降序,或者同时提供这两种顺序


int CompareTo(object-other)
:您是使用“generic”作为“对象”的通用术语,还是使用“generic”作为“C#generics”的术语一些示例代码可以帮助您了解您试图理解的内容。(同时编辑你的帖子也考虑删除“你的生活故事”文本,它不直接涉及问题)。这一切都很好,但是我想知道引擎盖下面发生了什么。我知道如何使用IComparer/IComparable/分类方法和算法,而我不知道如何使用的方法和算法我可以很容易地弄清楚。我想最简单的表达方式是,我想看看它在比较时到底做了什么。显然,最好的方法是查看源代码,但如果我在任何地方都能找到C#源代码,我会感到很不舒服。我提供的链接清楚地说明了发生了什么,在某个点上,只是
注意,IComparer.Compare方法需要三级比较。根据一个值是大于、等于还是小于另一个值,返回1、0或-1。通过在此方法中切换逻辑运算符,可以更改排序顺序(升序或降序)。