从Array.BinarySearch抛出的ArgumentException <t>(T [],int,int,T)</t>

时间:2013-10-13 09:51:33

标签: c# .net arrays

MSDN页面记录了方法

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

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

  

索引和长度未指定数组中的有效范围    - 或者 - value是与数组元素不兼容的类型。

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

1 个答案:

答案 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。似乎使用泛型有助于避免在这种情况下令人讨厌的错误。