此MSDN页面记录了方法
public static int BinarySearch<T>(
T[] array,
int index,
int length,
T value
)
在异常列表中,它声明在以下情况下抛出ArgumentException:
索引和长度未指定数组中的有效范围 - 或者 - value是与数组元素不兼容的类型。
这怎么可能?在什么情况下T不能与T []中的元素兼容?我怀疑这可能是文档中的错误,还是我遗漏了一些基本的东西?
答案 0 :(得分:0)
看this link given above我尝试了几个案例。
这里有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&lt; index + count; i ++) { array [i] = value; } }
我不得到所述异常,因为以下行甚至没有编译
FillT(strings, 90, 10, 0);
这两个
FillT<string>(strings, 90, 10, 0);
所以在这种情况下,编译器知道第三个参数必须是string类型,并且不能在那里传递int。似乎使用泛型有助于避免在这种情况下令人讨厌的错误。