【发布时间】:2013-04-01 16:38:26
【问题描述】:
我创建了一个 C# Windows 运行时组件,它有一个接受 IDictionary 参数的公共静态方法。
public sealed class DictionaryTest
{
public static void print(IDictionary<string, string> dict)
{
}
}
我正在从 WinJS 应用程序访问该库,并在 default.js 中调用此方法,如下所示:
var ps = new Windows.Foundation.Collections.PropertySet();
ps['testkey'] = "testvalue";
TestComponent.DictionaryTest.print(ps);
当我运行应用程序时,我收到“不支持此类接口”错误。 print() 的智能感知显示它接受 Windows.Foundation.Collections.IMap 的参数,但我找不到该集合。
如何将字典之类的对象从 Javascript 传递到 print(IDictionary)?
编辑:
尽管@IAbstract 提出了一个很好的观点,但我不能将其用作解决方案。我的限制是我不能修改 print() 方法。所以我需要能够将字符串的字典类型对象从 javascript 传递给 print(IDictionary<string, string> dict) 方法。
【问题讨论】:
-
看看
Method Signature..next 我要问的是ps类型为Dictionary或Collection` 如果是这样,那么你需要创建Dictionary` 类型没有根据您提供的代码进行操作.. ps是否有 .ToDictionary() 扩展方法..?如果不是,那么您可以尝试使用Linq语句创建一个,例如,您可以尝试类似var dictObj = ps.ToDictionary(x => x, x=> x);的操作,看看它是否成功将该集合转换为Dictionary<> -
Windows.Foundation.Collections.PropertySet声明如下:public sealed class PropertySet : Object, IPropertySet, IObservableMap<String, Object>, IDictionary<String, Object>, IEnumerable<KeyValuePair>至少,OP 的值需要从Object转换为string。 -
感谢@IAbstract,我将 print 修改为 print(IDictionary
dict) 并将对象转换为字符串并且代码有效。你会认为传递一个字符串(它也是一个对象)会起作用:) 我想知道这是否仍然是将字典类型对象传递给 Windows 运行时组件的最佳方式
标签: c# collections windows-runtime windows-store-apps winjs