我们使用第三方dll公开了一个取出NetworkStream.Data []参数的方法:
public void Read(int elementsCount, int timeOutInMs, out Data[] array, out bool timedOut)
我们通过传入NetworkStream.Data(在所述库中定义的数据类型)数组在我们的代码中使用它,并且它在Visual Studio 2012下编译得很好。
但是,在Visual Studio 2017下编译时,会生成强制转换错误:
错误CS1503参数4:无法将'NetworkStream.Data []'强制转换为'out NetworkStream.Data [*]'
像DnSpy这样的反编译器在方法的工具提示中表示相同的东西,在IL中它显示了argumnt是
[out] valuetype NetworkStream.Data[0...]& data
这个NetworkStream.Data [*]或NetworkStream.Data [0 ...]是什么意思,为什么演员在VS 2017中失败?
这意味着该数组具有一个或多个非零的下限。
例如,这段代码:
Array test = Array.CreateInstance(typeof(int), new[] { 2 }, new[] { 2 });
Console.WriteLine(test.GetType().FullName);
打印System.Int32[*]
。
这是一个非默认下限的数组,see documentation如何处理这个问题。