编辑:我找到了答案(在 Tejs 的帮助下);见下文。
我正在使用 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) {
...
这也没有用 - 同样,数组的大小是正确的,但所有元素都是空的。
我试过传递字符串文字、字符串变量,在 javascript 中使用“new Array(...)”,将“Foo”的签名更改为“params string[]”和“params object[]”,所有无济于事。
由于传递单个字符串工作正常,我可能可以通过一些 hackery 来解决这个问题……但看起来这确实应该工作。对我来说,数组以正确的大小传入(即无论做什么编码(marshal)处理都知道一些关于 javascript 数组结构的事情),但内容却没有被填充,这对我来说似乎真的很奇怪。
最佳答案
您的问题的解决方案非常简单,只是需要敏锐的眼光才能注意到它。 首先,您必须接受这样一个事实,即在 C#(也很可能是 javascript)中,您不能拥有一个数组数组(至少不像您这样做的那样!) 所以在你的 javascript 中:
var result = MyLibrary.MyNamespace.MyClass.foo([string1, string2, string3]);
在你的 C# 中:
public static string Foo(string[] strings) {
您将需要让方法 Foo 传递字符串数组的几个参数,如下所示:
public static string Foo(string[] string1, string[] string2, string[] string3) {
但是如果你想创建一个数组数组,你将不得不使用一个列表构造器:
public static string Foo(List< string[] > strings) {
但上述答案的问题是 Javascript 没有 List 构造函数,所以我建议使用第一种解决方案,除非你能找到解决这个问题的方法!
关于c# - 在 Metro 应用程序中将数组从 javascript 传递到 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10624077/