int [*]在Visual Studio 2017中的C#中意味着什么

问题描述 投票:2回答:2

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

c# visual-studio-2017
2个回答
3
投票

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

例如,这段代码:

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

打印System.Int32[*]


0
投票

这是一个非默认下限的数组,see documentation如何处理这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.