查看上面给出的这个链接,我尝试了一些案例。
有了这个 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。似乎使用泛型有助于避免在这种情况下出现讨厌的错误。