gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 04:18:34 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com