在Visual Studio 2017下C#中int [*]是什么意思

时间:2018-10-22 09:05:34

标签: c# visual-studio-2017

我们利用第三方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中失败?

2 个答案:

答案 0 :(得分:3)

这意味着数组具有一个或多个不为零的下限。

例如,此代码:

Array test = Array.CreateInstance(typeof(int), new[] { 2 }, new[] { 2 });
Console.WriteLine(test.GetType().FullName);

打印System.Int32[*]

答案 1 :(得分:0)

这是一个具有非默认下界的数组,see documentation关于如何处理此问题。