我的方法如下:
T[] field;
public Method(IList<T> argument)
{
this.field = (T[])argument;
}
当执行方法体时,在演员表中是否进行枚举?如果基础类型不同,会改变吗?
答案 0 :(得分:8)
不,它不会枚举任何东西。如果argument
实际上 是T[]
,它会成功,如果不是,则会抛出InvalidCastException
异常。 (如果argument
为空,则返回null。)
答案 1 :(得分:4)
如果argument
是对数组(类型T
)的引用,则没有枚举 - 它是一个简单的强制转换。
如果argument
是对List<T>
或其他实现IList的类的引用,则可能存在转换异常。 (我可能会说,因为可能会有一个隐含或明确转换为T[]
- 很可能不存在这种情况。
编辑:正如Jon指出的那样,不会在泛型方法中进行转换,因此上述括号不正确。