首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组作为ValueSet中的值

数组作为ValueSet中的值
EN

Stack Overflow用户
提问于 2019-05-22 05:16:28
回答 2查看 455关注 0票数 3

我的目标是将字符串数组作为值添加到ValueSet中。我可以在C#中做到这一点,没有任何问题,但在C++-WinRT中遇到了一些问题。

我试图将array_view传递给box_value,以便将其转换为IInspectable类型,但得到了错误T must be WinRT type。下面是检查问题的示例代码:

代码语言:javascript
复制
ValueSet MyValueSet;
hstring key(L"key");
vector<wstring> mystringvalues{ L"1",L"2" };
std::vector<hstring> hvector;
for (std::wstring v : mystringvalues) {
    hvector.push_back(hstring(v));
}
array_view<hstring> hvalue(hvector);
IInspectable keyValue = box_value(hvalue);
MyValueSet.Insert(key, keyValue);

请告诉我如何做到这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-31 06:57:32

关于如何创建集合对象,请参见https://learn.microsoft.com/en-us/windows/uwp/cpp-and-winrt-apis/collections

这一守则应适用于:

代码语言:javascript
复制
ValueSet myValueSet;
hstring key(L"key");
std::vector<std::wstring> mystringvalues{ L"1",L"2" };
std::vector<hstring> hvector;
for (std::wstring v : mystringvalues) {
    hvector.push_back(hstring(v));
}
myValueSet.Insert(key, winrt::single_threaded_vector(std::move(hvector)));

甚至更短:

代码语言:javascript
复制
ValueSet myValueSet;
myValueSet.Insert(L"key", winrt::single_threaded_vector<hstring>({L"1", L"2"}));
票数 3
EN

Stack Overflow用户

发布于 2020-08-19 15:20:01

winrt::single_threaded_vector<hstring>不适合我。

我发现PropertyValue.CreateStringArray(String[])方法工作得很好。

https://learn.microsoft.com/en-us/uwp/api/windows.foundation.propertyvalue.createstringarray

设定值:

代码语言:javascript
复制
ValueSet MyValueSet;
hstring key(L"key");
vector<wstring> mystringvalues{ L"1",L"2" };
std::vector<hstring> hvector;
for (std::wstring v : mystringvalues) {
    hvector.push_back(hstring(v));
}
array_view<hstring> hvalue(hvector);
MyValueSet.Insert(key, PropertyValue::CreateStringArray(hvalue));

代码语言:javascript
复制
MyValueSet.Insert(key, PropertyValue::CreateStringArray(com_array<hstring>{ L"1", L"2" }));

并获得价值:

代码语言:javascript
复制
com_array<hstring> strValues = MyValueSet.Lookup(key).as<IReferenceArray<hstring>>().Value();
for (hstring str : strValues)
{
    wcout << L"str = " << str.c_str() << endl;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56249722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档