【问题标题】:convert List<Object> to System.Array[]将 List<Object> 转换为 System.Array[]
【发布时间】:2016-02-02 05:46:23
【问题描述】:

我有一个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&lt;object&gt; 显式转换为System.Array[] 吗?

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

【问题讨论】:

  • Array[]的数据类型是什么?
  • 您存储在 Array[] 中的元素的数据类型是什么?
  • 让我们说它的数据类型 Class1 然后你可以声明你的列表 List val= new List();然后 list.toArray 工作。
  • List&lt;Object&gt; 或无类型数组的有效用例确实很少 - 您可能需要重新考虑这种方法并进行更多阅读!

标签: c# arrays list sorting


【解决方案1】:

多使用一点 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[]}等等……

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

【讨论】:

    【解决方案2】:

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

    那么,你为什么不使用:

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

    而不是

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多