gpt4 book ai didi

C# Comparer.Default.Compare 和 Comparer.Default 不返回 -1、0 或 1

转载 作者:行者123 更新时间:2023-11-30 16:39:43 32 4
gpt4 key购买 nike

所有“数字”比较器(例如 Comparer.Default<int>Comparer.Default<long> 等)返回 -1 的原因是什么? , 01 ,但是 Comparer.Default<short>Comparer.Default<byte>将返回两个比较数字之间的差异?

这是优化功能(更快地返回差异)和/或因为两个短裤或两个字节之间的可能差异将适合 int (Comparer<T>.Compare 返回类型)?但是两者的区别ints不会(例如 Comparer<T>.Compare(int.MinValue, int.MaxValue))

最佳答案

基于comments in the code是后者:

// Need to use compare because subtraction will wrap
// to positive for very large neg numbers, etc.

例如,假设我们有与 shortbyte for int 相同的实现:

private int Compare(int x, int y)
{
return x - y;
}

现在,IComparer 契约规定,如果 Compare 的结果是:

  • 小于零,则x < y;
  • 大于零,则x > y;
  • 零,然后 x == y;

但是,鉴于上面的实现,如果我们传递一个足够大的负整数作为第一个参数,减法将溢出并换成一个非常大的正数:

Compare(Int32.MinValue, 1); // returns 2147483647

即结果会错误地指示 Int32.MinValue 大于 1

鉴于 IComparer 定义为:

public int Compare (T x, T y);

也就是说,结果类型是一个int,只执行参数shortbyte 的减法是安全的,因为它永远不会导致 int 结果溢出。

关于C# Comparer.Default<short>.Compare 和 Comparer.Default<byte> 不返回 -1、0 或 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52671354/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com