这个MSDN页面记录了方法
public static int BinarySearch<T>(
T[] array,
int index,
int length,
T value
)
在异常列表上,它声明在以下情况下引发ArgumentException:
索引和长度未在数组中指定有效范围。
-或-
值的类型与数组的元素不兼容。
这怎么可能?在什么情况下T不能与T []中的元素兼容?我怀疑这可能是文档中的错误,还是我缺少基本知识?
看上面给出的链接,我尝试了几种情况。
此处具有“填充”的定义:
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:公共静态void FillT(T []数组,int索引,int计数,T值){for(int i =索引; i <索引+计数; i ++){array [i] =值; }}
我没有得到说异常,因为下面的行甚至没有编译
FillT(strings, 90, 10, 0);
这也不
FillT<string>(strings, 90, 10, 0);
因此,在这种情况下,编译器知道第三个参数必须为字符串类型,并且不能在其中传递int值。在这种情况下,似乎使用泛型有助于避免令人讨厌的错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句