4

MSDN页面记录了该方法

public static int BinarySearch<T>(
    T[] array,
    int index,
    int length,
    T value
)

在异常列表中,它声明 ArgumentException 在以下情况下被抛出:

index 和 length 未指定数组中的有效范围。
-或 -
value 的类型与数组的元素不兼容。

这怎么可能?在什么情况下 T 不能与 T[] 中的元素兼容?我怀疑这可能是文档中的错误,还是我遗漏了一些基本的东西?

4

1 回答 1

0

查看上面给出的这个链接,我尝试了一些案例。

有了这个 Fill 的定义:

public static void Fill(object[] array, int index, int count, object value)
    {
        for (int i = index; i < index + count; i++)
        {
            array[i] = value;
        }
    }

确实可以ArrayTypeMismatchException在这里获得第三次调用:

string[] strings = new string[100];
Fill(strings, 0, 100, "Undefined");
Fill(strings, 0, 10, null);
Fill(strings, 90, 10, 0); // a boxed 0 is not a string. 

但是,如果我这样定义 Fill: public static void FillT(T[] array, int index, int count, T value) { for (int i = index; i < index + count; i++) { array[i] =价值; } }

没有得到说异常,因为以下行甚至没有编译

FillT(strings, 90, 10, 0);

这也不是

FillT<string>(strings, 90, 10, 0);

所以在这种情况下,编译器知道第三个参数必须是 string 类型,并且不能在那里传递 int。似乎使用泛型有助于避免在这种情况下出现讨厌的错误。

于 2013-11-01T14:11:58.463 回答