如何在QuantumSimulator Run()命令中将C#数组传递到Q#操作中?

Ber*_*yTD 3 c# quantum-computing q#

我正在制作一个程序,该程序使用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);
}
Run Code Online (Sandbox Code Playgroud)

Q#QMain操作在Operations.qs

operation QMain(keyCode : Int[]) : (Result, Result, Result)
Run Code Online (Sandbox Code Playgroud)

在Q#中,Int数据类型对应于C#long

传递字符串数组也失败,具有以下签名QMain

operation QMain(s : String[]) : (Result, Result, Result)
Run Code Online (Sandbox Code Playgroud)

每当我尝试在中使用任何数组作为参数时,我得到的都是相同的错误QMain

Mar*_*ova 7

用于在Q#代码之间传递定长数组的数据类型为QArray。您必须先从数组中显式创建此数据类型的实例,然后再将其传递给QMain

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

您可以在示例中看到一个将数组传递给Q#的示例