Как передать массив C # в операцию Q # внутри команды QuantumSimulator Run ()? - PullRequest
2 голосов
/ 06 мая 2019

Я делаю программу, которая использует массив целых чисел, взятых в качестве параметра из скрипта C # в Driver.cs, но выдает следующую ошибку:

Error CS1503 Argument 2: cannot convert from 'long[]' to 'Microsoft.Quantum.Simulation.Core.IQArray<long>'

Вместо этого я попытался передать массив строк и преобразовать их внутри программы, но появляется идентичная ошибка:

Error CS1503 Argument 2: cannot convert from 'string[]' to 'Microsoft.Quantum.Simulation.Core.IQArray<string>'

Вот код C # в Driver.cs - keyArray - это массив, который я пытаюсь передать в Q #.

using (var qsim = new QuantumSimulator())
{
    var result = QMain.Run(qsim, keyArray).Result;
    var (res0, res1, res2) = result;
    System.Console.WriteLine(res0 + ", " + res1 + ", " + res2);
}

Q # Операция QMain в Operations.qs:

operation QMain(keyCode : Int[]) : (Result, Result, Result)

В Q #, Intтип данных соответствует C # long.

Передача массива строк также не удалась со следующей сигнатурой QMain:

operation QMain(s : String[]) : (Result, Result, Result)

Все, что я получаю, одинаковоошибка всякий раз, когда я пытаюсь использовать любой массив в качестве параметра в QMain.

1 Ответ

5 голосов
/ 06 мая 2019

Тип данных, используемый для передачи массивов фиксированной длины в и из кода Q #, равен QArray. Вы должны явно создать экземпляр этого типа данных из массива, прежде чем передать его в QMain:

var result = QMain.Run(qsim, new QArray<long>(keyArray)).Result;

Вы можете видеть пример передачи массивов в Q # в примерах .

...