c# - 在 Metro 应用程序中将数组从 javascript 传递到 C#

标签 c# javascript windows-8 windows-runtime

编辑:我找到了答案(在 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/

相关文章:

c# - 为什么可选参数必须出现在声明的末尾

c# - 无法在 Visual Studio 中连接到 MySQL 数据库

C# - 按选定列对矩形数组进行排序

c# - WinRT - SnapsToDevicePixels?

windows-8 - Visual Studio 2010 SP1 与 Windows 8 不兼容?

使用泛型类型的 C# lambda 查询

javascript - Ajax,多个下拉菜单

c# - 如何使用 Asp.net MVC 从页面引用位于 View 文件夹中的 .js 文件

javascript twitter 事件并获取推文文本

c# - 从 Windows 8/WinRT 中的不同线程更新 UI 元素