3

我有一个看起来像这样的方法:

T[] field;

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

当方法的主体被执行时,枚举是否在强制转换期间发生?如果基础类型不同,这种情况会改变吗?

4

2 回答 2

8

不,它不会枚举任何东西。argument如果实际上a ,它将成功,如果不是,则T[]抛出InvalidCastException异常。(如果argument为 null,则返回 null。)

于 2010-03-16T15:06:55.933 回答
4

如果argument是对(类型)数组的引用T,则没有枚举——它是一个简单的强制转换。

如果argument是对实现 IList 的一个List<T>或另一个类的引用,那么可能会出现强制转换异常。(我说可能是因为可能会隐含或显式转换为T[]- 很可能不会有)。

编辑:正如 Jon 所指出的,在泛型方法中不会进行转换,所以上面的括号是不正确的。

于 2010-03-16T15:09:17.983 回答