我有一个数组列表,其中我添加了许多数组,但它们都是相同的大小。现在我想将此列表转换为二维数组。我试着用这种方式:
List<Array^>^ vList = gcnew List<Array^>();
//some code where I add elements to vList
array<String ^, 2> ^ anArray = gcnew array<String ^, 2>(vList->Count, 5);
anArray = vList->ToArray();
但我有这个错误:
a value of type "cli::array<System::Array ^, 1> ^" cannot be assigned to an entity of type "cli::array<System::String ^, 2> ^"
我不知道如何转换它。
答案 0 :(得分:1)
您必须单独迭代并复制所有字符串。但是,原始类型Array^
并不方便使用,因此您需要对此做些什么。
基本上,你需要做的是:
for (int outer = 0; outer < vList->Count; outer++)
{
arrayOfSomeSort^ innerArray = vList[outer];
for (int inner = 0; inner < innerArray.Length; inner++)
anArray[outer, inner] = innerArray[inner];
}
根据程序的其余部分以及List中实际存在的对象,有几个选项可供选择。以下是我看到的选项,按优先顺序排列。
List<Array^>^
,vList
为List<array<String^>^>^
。如果List真的是一个字符串数组列表,那么这个选项可能是最正确的。在这种情况下,arrayOfSomeSort^
将为array<String^>^
。vList
无法更改类型,但确实包含字符串数组,那么我的本地变量innerArray
的类型为array<String^>^
,并且在将其从vList
中拉出来时进行演员。array<Object^>^ innerArray
,并转而使用它,并执行当您从String^
中拉出每个字符串时,转换为innerArray
。innerArray
保留为Array^
类型。您需要调用显式方法Array.GetValue(int)
,而不是使用[]
索引器。与前一个选项一样,当您将每个字符串拉出内部数组时,您需要将其转换为。您已将第二个维度设置为5,而不检查内部数组的长度;我假设你知道我们不知道的东西,并且确定不会有大于5的东西。如果没有,你需要迭代列表一次以获得最大值数组大小,创建2D数组,然后复制字符串。