通过接口IList传递数组时是否发生装箱?

本文关键字:是否 数组 IList 接口 | 更新日期: 2023-09-27 18:07:53

我想知道在以下场景中是否发生了装箱:

int[] someNumbers = { 1, 2, 3, 4, 5 };
Foo(someNumbers);
// ...
private void Foo(IList<int> numbers) {
}

我无法找到这个问题的答案,所以如果这是一个重复的道歉!

通过接口IList<T>传递数组时是否发生装箱?

int是值类型,数组是引用类型,因此someNumbers是引用类型。因此,当将其分配给IList<int>时,不会发生拳击。如果将数组中的元素赋值给Foo中的引用类型,例如

,则会发生装箱。
private void Foo(IList<int> numbers) {
    IComparable<int> nc = numbers[0];
}