atk*_*sch 8 javascript c# windows-8 windows-runtime
编辑:我找到了答案(在Tejs的帮助下); 见下文.
我正在使用HTML/Javascript开发Metro应用程序,以及一些基于C#的帮助程序库.一般来说,我在从Javascript调用C#方法方面取得了很大的成功,但我似乎无法通过数组(在我的特定情况下,字符串数组)来工作.传递单个字符串可以正常工作.
我的代码是这样的:
// in javascript project
var string1 = ...;
var string2 = ...;
var string3 = ...;
var result = MyLibrary.MyNamespace.MyClass.foo([string1, string2, string3]);
Run Code Online (Sandbox Code Playgroud)
然后,在C#中:
// in C# project
public sealed class MyClass {
public static string Foo(string[] strings) {
// do stuff...
}
}
Run Code Online (Sandbox Code Playgroud)
问题是方法"Foo"获得一个具有正确长度的数组(所以在上面的例子中为3),但所有元素都是空的.我也试过这个:
public static string Foo(object[] strings) {
...
Run Code Online (Sandbox Code Playgroud)
这也没有用 - 再次,数组是正确的大小,但所有元素都是null.
我试过传递字符串文字,字符串变量,在javascript中使用"new Array(...)",将"Foo"的签名更改为"params string []"和"params object []",都无济于事.
由于传递单个字符串工作正常,我可能可以通过一些hackery来解决这个问题......但看起来这应该可行.对我来说,这个数组以正确的大小传入(即,正在进行编组的任何事情都知道关于javascript数组结构的SOMETHING)并且内容没有被填充,这对我来说似乎很奇怪.
诀窍是使用 IEnumerable 而不是 string[]。因此,将我的原始代码替换为以下内容:
public sealed class MyClass {
public static string Foo(IEnumerable<string> strings) {
// do stuff...
}
}
Run Code Online (Sandbox Code Playgroud)
另请注意,如果您需要传递字符串以外的数组,IEnumerable 也可以工作。
感谢@Tejs 的灵感!
| 归档时间: |
|
| 查看次数: |
1024 次 |
| 最近记录: |