gpt4 book ai didi

c# - 如何将一个整数数组发送到一个接受 IComparable 数组的函数?

转载 作者:太空狗 更新时间:2023-10-29 22:30:48 24 4
gpt4 key购买 nike

我有一个接受 IComparable 数组的 C# 函数

public static void sort(IComparable[] a){//...}

如果我向该函数发送一个字符串数组,它会被接受,但一个整数数组不会被接受,即使结构 Int32 扩展了 IComparable

public struct Int32 : IComparable, IFormattable, 
IConvertible, IComparable<int>, IEquatable<int>

第一个问题是为什么不能将值类型的数组发送到这样的函数。

第二个问题是我应该如何将值类型的数组发送到接受IComparable 数组的函数。

最佳答案

尽管 intIComparable,但 int[] 不是 IComparable[]。想象一下,如果它是:

int[] x = new int[10];
IComparable[] y = x;
y[0] = "hello";

这将尝试在 int[] 中存储一个引用。坏处。

基本上,值类型数组不是协变的。 (引用类型数组在编译时是协变的,但如果您尝试在执行时存储无效值,则会抛出异常。这是 IMO 的设计缺陷,但没关系......)

解决这个问题的方法是使用泛型:

public static void Sort<T>(T[] array) where T : IComparable

或者更好地使用 IComparable 的通用形式:

public static void Sort<T>(T[] array) where T : IComparable<T>

(这样您就可以在调用 CompareTo 时避免装箱。)

关于c# - 如何将一个整数数组发送到一个接受 IComparable 数组的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28218128/

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