将 List 转换为 System.Array[]

本文关键字:System Array 转换 List Object | 更新日期: 2023-09-27 18:32:59

我有一个Array

Array[] Values;

我使用此代码对Array进行了排序

List<Object> val= new List<Object>();
foreach (var arr in Values)
{
    if (arr.GetValue(1, 9).Equals("Impact"))
        val.Add(arr);
}
foreach (var arr in Values)
{
    if (arr.GetValue(1, 9).Equals("Critical"))
        val.Add(arr);
}
foreach (var arr in Values)
{
    if (arr.GetValue(1, 9).Equals("High"))
        val.Add(arr);
}
foreach (var arr in Values)
{
    if (arr.GetValue(1, 9).Equals("Medium"))
        val.Add(arr);
}
foreach (var arr in Values)
{
    if (arr.GetValue(1, 9).Equals("Low"))
        val.Add(arr);
}

现在我必须将List值转换回System.Array[].

我尝试使用Values = val.ToArray();执行此操作,但它给出了编译错误,object[]无法隐式转换为System.Array[]

有没有办法将List<object>转换为显式System.Array[]

或者有没有其他方法可以对Values进行排序?

将 List<Object> 转换为 System.Array[]

多用一点LINQ Select将帮助您解决问题:

Array[] Values = val.Select(x => (Array)x).ToArray();

注意:每个x都必须可转换为Array

也就是说,Array本身已经是一个数组。 对我来说,Array[]似乎Array of Arrays,元素的数据类型不是强类型。

Array a = new int[10]; //this is ok
Array b = new string[10]; //this is also ok

因此,您的Array[]可能包含任何强类型数组。 {int[], string[], double[]}等等...

除非它是你真正想要的,否则它似乎不是那么安全的设计 - 恕我直言。

在我看来,这是一个设计问题。为什么首先将 val-List 声明为 Object-List 而不是 Array-List?

那么,为什么不使用:

List<Object> val= new List<Array>();

而不是

List<Object> val = new List<Object>();

这样,一个简单的 ToArray() 调用应该可以正常工作。

相关文章: