在Visual studio 2017下,int[*]在C#中的含义是什么

在Visual studio 2017下,int[*]在C#中的含义是什么,c#,visual-studio-2017,C#,Visual Studio 2017,我们使用了第三方dll,该dll公开了一个从NetworkStream中取出数据的方法。Data[]参数: public void Read(int elementsCount, int timeOutInMs, out Data[] array, out bool timedOut) 我们在代码中通过传入NetworkStream.Data(在所述库中定义的数据类型)数组来使用它,它在VisualStudio2012下可以很好地编译 但是,在Visual Studio 2017下编译时,会生

我们使用了第三方dll,该dll公开了一个从NetworkStream中取出数据的方法。Data[]参数:

public void Read(int elementsCount, int timeOutInMs, out Data[] array, out bool timedOut)
我们在代码中通过传入NetworkStream.Data(在所述库中定义的数据类型)数组来使用它,它在VisualStudio2012下可以很好地编译

但是,在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中强制转换失败?

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

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

例如,此代码:

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

打印
System.Int32[*]

似乎与之相关,但我自己没有这方面的经验,所以我将让您判断它是否有用。似乎
var
声明可以拾取非零基数组类型,甚至C不允许拼写它。没有提到“非默认下限”[*]或您提供的链接中的“[0..]”。此外,通常不鼓励只使用链接的答案-尝试将答案包含在答案中,并使用链接作为替代。好的,这就是我收集的。现在我的问题是,有没有可能在C#中定义这样一个数组,这样我就可以调用一个需要这样一个数组的方法,特别是因为它是一个out参数,所以我需要定义一个该类型的变量,由被调用的方法填充。@DeniBuller您可能需要将参数类型声明为
Array
@MatthewWatson。问题是对于
out
参数变量类型必须完全匹配。OP需要联系第三方的供应商我想我该问一下怎么称呼它。这里有点不对劲。@Dennistroll没关系,我至少大概回答了我自己的问题:LabVIEW 2015不工作,LabVIEW 2017工作。如果查看LabVIEW生成的xml文件,参数在LabVIEW 2015中定义为字符串[*],而在2017中定义为纯字符串[],这当然是正确的,因为LabVIEW没有索引数组。