2

C#関数との通信を行う必要があるPythonスクリプトがあります。この関数は3つのパラメーターを想定しており、そのうち2つはoutキーワードを介して返されます。宣言は次のようになります。

RunComputation(InfoParams locInfo, out double[,] dataTable, out int numPoints){ ... }

Pythonは動的に型付けされた言語であるため、 outキーワードの処理方法がわかりません。私はいくつかの検索を行い、clr.StrongBoxとclr.Referenceに関するいくつかのものを見つけました。これらは、強く型付けされたオブジェクトを渡す必要がある状況で使用するのはかなり簡単に思えます。

numPointsパラメーターの場合、Pythonコードで次のように定義できます。

 num_points = clr.Reference[int]

そして、それは大丈夫のようです。問題はdataTable配列にあります。強く型付けされたオブジェクトがdoubleの配列であることを示す構文がわかりません。それが与えるエラーは、Typeのインスタンスを予期していることを私に知らせますStrongBox[Array[float]]。システムから配列をインポートして、そのC#タイプを参照として追加できるかどうかを確認しようとしましたが、失敗しました。何か案は?

4

1 に答える 1

1

引数のみを使用している場合は、暗黙的な方法outを使用することもできます。つまり、メソッドに引数を渡さない場合、それらはタプルとして返されます。 out

例えば

d = Dictionary[str, float]()
(keyfound,value) = d.TryGetValue("b")

引数でも機能しrefます。
次の方法があると想像してください。

int Foo(int x, double[,] v)

この方法でメソッドを呼び出すことができます。

nrows = 5
ncols = 5
array = Array.CreateInstance(float, nrows, ncols)
(x, arrayNew) = obj.Foo(3, array)

そして最後に、の変更された値arrayはに含まれていますarrayNew

于 2012-05-10T20:36:06.533 に答える