EDIT:私は答えを見つけました(Tejsの助けを借りて)。下記参照。メトロアプリのjavascriptからC#に配列を渡す
私は、HTML/JavascriptといくつかのC#ベースのヘルパーライブラリを使用してMetroアプリケーションを開発しています。一般的に私はJavascriptからC#メソッドを呼び出すことに成功していますが、配列を渡すことはできません。個々の文字列を渡すことは問題なく動作します。
// in javascript project
var string1 = ...;
var string2 = ...;
var string3 = ...;
var result = MyLibrary.MyNamespace.MyClass.foo([string1, string2, string3]);
その後、C#で:
私のコードは次のようなものである
// in C# project
public sealed class MyClass {
public static string Foo(string[] strings) {
// do stuff...
}
}
問題は、メソッド "foo" がでそう(正しい長さを持つ配列を取得していることです上記の例、3)、すべての要素は空です。私も試してみましたこの:動作しませんでした
public static string Foo(object[] strings) {
...
どちらか - もう一度、配列が正しいサイズだったが、すべての要素がnullでした。
javascriptで "new Array(...)"を使って文字列リテラル、文字列変数を渡してみました。 "Foo"の署名を "params string []"と "params object []"に変更しました。すべて無駄に。
個々の文字列を渡すとうまくいくので、私はおそらくいくつかのハッカーでこれを回避することができます...しかし実際にはうまくいくはずです。配列が適切なサイズ(つまり、マーシャリングを行っているものがjavascript配列構造について何かを知っているもの)として渡されているにもかかわらず、コンテンツにデータが取り込まれていないというのは本当に奇妙なようです。
'string1'、' string2'、 'string3'の代わりに文字列リテラルを使用するとどうなりますか? – Tejs
同じ結果 - C#コードでも空文字列しか受け取られません。 – atkretsch
配列項目の ''新しい文字列( "Hello World") 'はどうですか?おそらく、WinRTはオブジェクトが文字列であると仮定することはできません – Tejs