C# IDataParameter InvalidCastException

C# IDataParameter InvalidCastException,c#,teradata,C#,Teradata,Microsoft企业库数据访问应用程序块包含以下方法: private static IDataParameter[] CreateParameterCopy(DbCommand command) { IDataParameterCollection parameters = (IDataParameterCollection)command.Parameters; IDataParameter[] parameterArray = new IDataParameter[par

Microsoft企业库数据访问应用程序块包含以下方法:

private static IDataParameter[] CreateParameterCopy(DbCommand command)
{
    IDataParameterCollection parameters = (IDataParameterCollection)command.Parameters;
    IDataParameter[] parameterArray = new IDataParameter[parameters.Count];
    parameters.CopyTo(parameterArray, 0);

    return CachingMechanism.CloneParameters(parameterArray);
}
如果
command.Parameters
是一个(实现
IDataParameterCollection
的Teradata.NET提供程序类),则
Parameters.CopyTo(parameterArray,0)
抛出InvalidCastException:“无法将System.Data.IDataParameter[]类型的对象强制转换为Teradata.Client.provider.TdParameter[]”

我的第一个问题:

这是怎么发生的,为什么发生的

异常消息表明参数已成功复制到
parameterArray
,但随后有人试图将
parameterArray
从IDataParameter[]转换为TdParameter[]。(在任何情况下,都应使用机具。)

我的第二个问题:


您知道如何在不使用具体类型的情况下解决此问题吗?

问题在于该方法的内部代码

MSDN说:

无法将源ICollection的类型自动转换为目标数组的类型

这意味着数组必须能够在不进行显式转换的情况下进行转换。否则方法调用将失败

您不应该使用
CopyTo
,而应该使用
foreach
并手动逐个复制它们