Что означает int [*] в C # под Visual studio 2017 - PullRequest
0 голосов
/ 22 октября 2018

Мы используем стороннюю 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он показывает, что аргумент равен

[out] valuetype NetworkStream.Data[0...]& data

Что означают эти NetworkStream.Data [*] или NetworkStream.Data [0 ...] и почему происходит сбой приведения в VS 2017?

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Это означает, что массив имеет одну или несколько нижних границ, которые не равны нулю.

Например, этот код:

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

Печатает System.Int32[*].

0 голосов
/ 22 октября 2018

Это массив с нижней границей не по умолчанию, см. Документацию о том, как с этим справиться.

...