数组作为 ValueSet 中的值
Array as value in ValueSet
我的目标是将字符串数组作为值添加到 ValueSet
中。我可以在 C#
中完成,没有任何问题,但在 C++-WinRT
中遇到一些问题。
我正在尝试将 array_view
传递给 box_value
以便将其转换为 IInspectable
类型,但出现错误 T must be WinRT type
。这是检查问题的示例代码:
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);
请告知我该如何实现。
请参阅https://docs.microsoft.com/en-us/windows/uwp/cpp-and-winrt-apis/collections了解如何创建集合对象。
此代码应该有效:
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)));
甚至更短:
ValueSet myValueSet;
myValueSet.Insert(L"key", winrt::single_threaded_vector<hstring>({L"1", L"2"}));
winrt::single_threaded_vector<hstring>
对我不起作用。
我发现方法 PropertyValue.CreateStringArray(String[]) 工作正常。
https://docs.microsoft.com/en-us/uwp/api/windows.foundation.propertyvalue.createstringarray
设置值:
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));
或
MyValueSet.Insert(key, PropertyValue::CreateStringArray(com_array<hstring>{ L"1", L"2" }));
并获取值:
com_array<hstring> strValues = MyValueSet.Lookup(key).as<IReferenceArray<hstring>>().Value();
for (hstring str : strValues)
{
wcout << L"str = " << str.c_str() << endl;
}
我的目标是将字符串数组作为值添加到 ValueSet
中。我可以在 C#
中完成,没有任何问题,但在 C++-WinRT
中遇到一些问题。
我正在尝试将 array_view
传递给 box_value
以便将其转换为 IInspectable
类型,但出现错误 T must be WinRT type
。这是检查问题的示例代码:
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);
请告知我该如何实现。
请参阅https://docs.microsoft.com/en-us/windows/uwp/cpp-and-winrt-apis/collections了解如何创建集合对象。
此代码应该有效:
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)));
甚至更短:
ValueSet myValueSet;
myValueSet.Insert(L"key", winrt::single_threaded_vector<hstring>({L"1", L"2"}));
winrt::single_threaded_vector<hstring>
对我不起作用。
我发现方法 PropertyValue.CreateStringArray(String[]) 工作正常。
https://docs.microsoft.com/en-us/uwp/api/windows.foundation.propertyvalue.createstringarray
设置值:
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));
或
MyValueSet.Insert(key, PropertyValue::CreateStringArray(com_array<hstring>{ L"1", L"2" }));
并获取值:
com_array<hstring> strValues = MyValueSet.Lookup(key).as<IReferenceArray<hstring>>().Value();
for (hstring str : strValues)
{
wcout << L"str = " << str.c_str() << endl;
}