系统转换。数组到列表

昨晚我做了一个梦,下面的事情是不可能的。但在同一个梦里,有人告诉我事实并非如此。因此,我想知道是否有可能将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
640074 次浏览

给自己省点痛苦吧……

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 });

List还有一个构造函数重载,可以工作…但我猜这需要一个强类型数组。

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

... 对于数组类

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);

在vb.net中这样做

mylist.addrange(intsArray)

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

最简单的方法是:

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


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

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

你可以试试你的代码:

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作为你的代码。

有趣的是,没有人回答这个问题,OP使用的不是强类型int[],而是Array

你必须将Array转换为它实际的int[],然后你可以使用ToList:

List<int> intList = ((int[])ints).ToList();

注意,Enumerable.ToList调用构造函数列表,它首先检查参数是否可以强制转换为ICollection<T>(数组实现),然后它将使用更有效的ICollection<T>.CopyTo方法而不是枚举序列。

在希望以列表形式返回枚举数组的情况下,可以执行以下操作。

using System.Linq;


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

我希望这对你有帮助。

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);

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

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

亲吻(简单点,先生)

你可以这样做:

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

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

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

你也可以对复杂对象这么做。

我知道两种方法:

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

或者,

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

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