将System.Array转换为List

时间:2009-10-21 19:49:21

标签: c#

昨晚我梦见以下是不可能的。但是在同一个梦里,来自SO的人告诉我。因此,我想知道是否可以将System.Array转换为List

Array ints = Array.CreateInstance(typeof(int), 5);
ints.SetValue(10, 0);
ints.SetValue(20, 1);
ints.SetValue(10, 2);
ints.SetValue(34, 3);
ints.SetValue(113, 4);

List<int> lst = ints.OfType<int>(); // not working

11 个答案:

答案 0 :(得分:372)

为自己省点痛苦......

using System.Linq;

int[] ints = new [] { 10, 20, 10, 34, 113 };

List<int> lst = ints.OfType<int>().ToList(); // this isn't going to be fast.

也可以......

List<int> lst = new List<int> { 10, 20, 10, 34, 113 };

...或

List<int> lst = new List<int>();
lst.Add(10);
lst.Add(20);
lst.Add(10);
lst.Add(34);
lst.Add(113);

...或

List<int> lst = new List<int>(new int[] { 10, 20, 10, 34, 113 });

...或

var lst = new List<int>();
lst.AddRange(new int[] { 10, 20, 10, 34, 113 });

答案 1 :(得分:69)

List也有一个构造函数重载可以工作......但我想这需要一个强类型数组。

//public List(IEnumerable<T> collection)
var intArray = new[] { 1, 2, 3, 4, 5 };
var list = new List<int>(intArray);

...对于Array类

var intArray = Array.CreateInstance(typeof(int), 5);
for (int i = 0; i < 5; i++)
    intArray.SetValue(i, i);
var list = new List<int>((int[])intArray);

答案 2 :(得分:48)

有趣的是,没有人回答这个问题,OP不使用强类型 country_visits = j["nb_unique_visits"].to_i 而是使用int[]

您必须将Array转换为实际内容Array,然后才能使用int[]

ToList

请注意Enumerable.ToList调用list constructor首先检查参数是否可以转换为List<int> intList = ((int[])ints).ToList(); (数组实现),然后它将使用效率更高的{{3}而不是枚举序列。

答案 3 :(得分:26)

最简单的方法是:

int[] ints = new [] { 10, 20, 10, 34, 113 };

List<int> lst = ints.ToList();

List<int> lst = new List<int>();
lst.AddRange(ints);

答案 4 :(得分:5)

如果您想要将一个枚举数组作为列表返回,您可以执行以下操作。

using System.Linq;

public List<DayOfWeek> DaysOfWeek
{
  get
  {
    return Enum.GetValues(typeof(DayOfWeek))
               .OfType<DayOfWeek>()
               .ToList();
  }
}

答案 5 :(得分:4)

在vb.net中只是这样做

mylist.addrange(intsArray)

Dim mylist As New List(Of Integer)(intsArray)

答案 6 :(得分:4)

你可以这样做:

int[] ints = new[] { 10, 20, 10, 34, 113 };

这是你的数组,而且你可以像这样调用你的新列表:

 var newList = new List<int>(ints);

您也可以为复杂对象执行此操作。

答案 7 :(得分:2)

您可以尝试使用代码:

Array ints = Array.CreateInstance(typeof(int), 5);
ints.SetValue(10, 0);

ints.SetValue(20, 1);
ints.SetValue(10, 2);
ints.SetValue(34, 3);
ints.SetValue(113, 4);

int[] anyVariable=(int[])ints;

然后你可以使用anyVariable作为你的代码。

答案 8 :(得分:1)

只需使用现有方法..ToList();

   List<int> listArray = array.ToList();

KISS(保持简单的SIR)

答案 9 :(得分:1)

我知道两种方法:

List<int> myList1 = new List<int>(myArray);

或者,

List<int> myList2 = myArray.ToList();

我假设您了解数据类型,并且会根据需要更改类型。

答案 10 :(得分:0)

我希望这有用。

enum TESTENUM
    {
        T1 = 0,
        T2 = 1,
        T3 = 2,
        T4 = 3
    }

获取字符串值

string enumValueString = "T1";

        List<string> stringValueList =  typeof(TESTENUM).GetEnumValues().Cast<object>().Select(m => 
            Convert.ToString(m)
            ).ToList();

        if(!stringValueList.Exists(m => m == enumValueString))
        {
            throw new Exception("cannot find type");
        }

        TESTENUM testEnumValueConvertString;
        Enum.TryParse<TESTENUM>(enumValueString, out testEnumValueConvertString);

获取整数值

        int enumValueInt = 1;

        List<int> enumValueIntList =  typeof(TESTENUM).GetEnumValues().Cast<object>().Select(m =>
            Convert.ToInt32(m)
            ).ToList();

        if(!enumValueIntList.Exists(m => m == enumValueInt))
        {
            throw new Exception("cannot find type");
        }

        TESTENUM testEnumValueConvertInt;
        Enum.TryParse<TESTENUM>(enumValueString, out testEnumValueConvertInt);