Происходит ли бокс при передаче массива через интерфейс IList <T>?

1

Я хотел бы знать, происходит ли бокс в следующем сценарии:

int[] someNumbers = { 1, 2, 3, 4, 5 };
Foo(someNumbers);

// ...

private void Foo(IList<int> numbers) {
}

Я не смог найти ответ уже по этому вопросу, поэтому извиняюсь, если это дубликат!

  • 3
    int[] является ссылочным типом, поэтому нет.
  • 0
    @Lee Ли Огромное спасибо! да, это имеет полный смысл. Если вы продвинете это в ответ, я приму :)
Теги:
arrays
boxing

1 ответ

2
Лучший ответ

Хотя int - типы значений, массивы являются ссылочными типами, поэтому someNumbers является ссылочным типом. Поэтому при присвоении ему IList<int> никакого бокса не происходит. Бокс произойдет, если вы присвоили элемент массива ссылочному типу внутри Foo например

private void Foo(IList<int> numbers) {
    IComparable<int> nc = numbers[0];
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню