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

时间:2016-02-02 05:46:24

标签: c# arrays list sorting

我有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 val转换回System.Array[]

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

有没有办法明确地将List<object>转换为System.Array[]

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

2 个答案:

答案 0 :(得分:2)

再多花一点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[]}等等......

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

答案 1 :(得分:1)

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

那么,为什么不使用:

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

而不是

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

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