6

在我最熟悉的语言 Haskell 中,有一种相当精确的方法来确定变量的类型。但是,在学习C#的过程中,我在这方面变得有些困惑。例如,该Array.Sort方法的签名是:

public static void Sort(
    Array array
)

null但是,如果参数是、多维的或未实现IComparable接口,则此方法将引发异常。那么,如果可能的话,为什么不是 type IComparable[]

4

1 回答 1

11

如果今天要编写该方法,您将使用如下内容:

public static void Sort<T>(T[] array)
    where T : IComparable // or even IComparable<T>
{ ... }

这不能强制数组在编译时不为空(可悲),但它可以确保数组是可比较的类型并且它是一维的。空检查仍然需要是运行时检查。

但这依赖于泛型,直到 .NET 2.0 才添加到语言中。(这也使用方法级别的泛型,而不是类级别的泛型,直到 .NET 3.5 才添加) Array.Sort被添加到 .NET 1.0 中的语言中。它没有被改变,因为那将是一个破坏性的改变,一个语言设计者选择不做的改变。

于 2013-11-14T22:43:09.923 回答