我们利用第三方dll,该第三方dll公开了一个使用out 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:无法将'out NetworkStream.Data []'强制转换为'out NetworkStream.Data [*]'
DnSpy之类的反编译器确实在该方法的工具提示中指示了相同的内容,而在IL中,它表示要精简的
[out] valuetype NetworkStream.Data[0...]& data
NetworkStream.Data [*]或NetworkStream.Data [0 ...]是什么意思,为什么强制转换在VS 2017中失败?
答案 0 :(得分:3)
这意味着数组具有一个或多个不为零的下限。
例如,此代码:
Array test = Array.CreateInstance(typeof(int), new[] { 2 }, new[] { 2 });
Console.WriteLine(test.GetType().FullName);
打印System.Int32[*]
。
答案 1 :(得分:0)
这是一个具有非默认下界的数组,see documentation关于如何处理此问题。