如何在C#中确定方法参数的适当类型?

时间:2013-11-14 22:36:20

标签: c# .net

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

public static void Sort(
    Array array
)

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

1 个答案:

答案 0 :(得分:11)

如果今天要编写方法,你可以使用这样的东西:

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

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

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