我有一个看起来像这样的方法:
T[] field;
public Method(IList<T> argument)
{
this.field = (T[])argument;
}
当方法的主体被执行时,枚举是否在强制转换期间发生?如果基础类型不同,这种情况会改变吗?
不,它不会枚举任何东西。argument
如果实际上是a ,它将成功,如果不是,则T[]
抛出InvalidCastException
异常。(如果argument
为 null,则返回 null。)
如果argument
是对(类型)数组的引用T
,则没有枚举——它是一个简单的强制转换。
如果argument
是对实现 IList 的一个List<T>
或另一个类的引用,那么可能会出现强制转换异常。(我说可能是因为可能会隐含或显式转换为T[]
- 很可能不会有)。
编辑:正如 Jon 所指出的,在泛型方法中不会进行转换,所以上面的括号是不正确的。