方法Array.SetValue(Object value,int index)允許使用常用索引器語法通常允許的涉及值/數組類型對的賦值,並且在嘗試使用通用索引器語法時會引發異常結合通常不被允許的類型。例如,考慮下面的局部變量聲明:將字節值賦給char數組
int[] twoints = new int[2] { 5, 6 };
下面四行不拋出任何運行時或編譯時異常:
twoints[1] = (sbyte)7;
twoints.SetValue((sbyte)7, 1);
twoints[1] = (char)7;
twoints.SetValue((char)7, 1);
在另一方面,這四個的行會拋出一個異常,無論是在運行時或在設計時:
twoints[1] = 4.5;
twoints.SetValue(4.5, 1);
twoints[1] = 4L;
twoints.SetValue(4L, 1);
然而,當我一個字節的值賦給一個字符數組,我得到了奇怪的結果。索引器的語法在編譯時被拒絕,並且的SetValue的API調用成功,在運行時:
char[] twochars = new char[2] { 'A', 'B' };
twochars[1] = (byte)70; // Not OK, refused by the compiler
twochars.SetValue((byte)70, 1); // OK, no exception at run-time
這是爲什麼呢操作允許?