что-то сказать для ответа:
-
Не беспокойтесь о дисперсии, в то время как рассматриваемый предмет
Array
, а неT[]
. -
Аналогичный случай для многомерных массивов - [здесь]
То есть N-dims к линейному преобразованию всегда возможно. Поэтому этот вопрос особенно привлек мое внимание, поскольку он уже реализовал IList
для линейного индексатора.
Вопрос:
В моем коде у меня есть следующее объявление:
public static Array ToArray<T>(this T source);
Мой код знает, как сделать souce
представляет массив (во время выполнения). И я пытаюсь разрешить входящему коду обращаться к его индектеру напрямую. Но без "как Илиста" это не может быть сделано.
Для возврата object[]
может потребоваться дополнительное преобразование/кастинг, что я мешаю сделать.
Я могу сделать это:
public static IList ToArray<T>(this T source);
Но я бы подумал, что метод с именем ToArray
возвращает IList
выглядит странно.
Таким образом, я смущен этим:
В объявлении Array
есть
object IList.this[int index];
Итак, мы можем
Array a;
a=Array.CreateInstance(typeof(char), 1);
(a as IList)[0]='a';
Но мы не можем
a[0]='a';
кроме того, если он был объявлен как
public object this[int index];
Единственное различие, которое я вижу, заключается в том, что он требует явного использования индексатора через интерфейс IList
, с помощью которого он был реализован, но почему? Есть ли преимущества? Или возникают проблемы?