Вызывает ли приведение IList <T>к массиву типа T [] перечисление? - PullRequest
3 голосов
/ 16 марта 2010

У меня есть метод, который выглядит следующим образом:

T[] field;

public Method(IList<T> argument)
{
    this.field = (T[])argument;
}

Когда выполняется тело метода, происходит ли перечисление во время приведения? Изменится ли это, если базовый тип будет другим?

Ответы [ 2 ]

8 голосов
/ 16 марта 2010

Нет, это ничего не будет перечислять. Он либо будет успешным, если argument на самом деле равен a T[], либо выдаст исключение InvalidCastException, если это не так. (Или вернуть ноль, если argument равно нулю.)

4 голосов
/ 16 марта 2010

Если argument является ссылкой на массив (типа T), то перечисления нет - это простое приведение.

Если argument является ссылкой на List<T> или другой класс, который реализует IList, то потенциально может возникнуть исключение приведения. (Я говорю потенциально, поскольку может быть имплицит или экспликация в T[] - скорее всего, не будет).

Редактировать: как указал Джон, преобразование не будет выполнено в универсальном методе, поэтому вышеприведенные скобки неверны.

...