简体   繁体   English

System.Array 到 List 的转换

[英]Conversion of System.Array to List

Last night I had dream that the following was impossible.昨晚我梦见以下事情是不可能的。 But in the same dream, someone from SO told me otherwise.但在同一个梦里,来自 SO 的人却告诉了我不同的说法。 Hence I would like to know if it it possible to convert System.Array to List因此我想知道是否可以将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);

to

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

Save yourself some pain...给自己省点痛...

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.

Can also just...也只能...

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

or...或者...

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

or...或者...

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

or...或者...

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

There is also a constructor overload for List that will work... But I guess this would required a strong typed array. List 还有一个构造函数重载可以工作......但我想这需要一个强类型数组。

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

... for Array class ... 对于数组类

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

Interestingly no one answers the question, OP isn't using a strongly typed int[] but an Array .有趣的是,没有人回答这个问题,OP 没有使用强类型int[]而是使用Array

You have to cast the Array to what it actually is, an int[] , then you can use ToList :您必须将Array转换为它的实际情况,一个int[] ,然后您可以使用ToList

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

Note that Enumerable.ToList calls the list constructor that first checks if the argument can be casted to ICollection<T> (which an array implements), then it will use the more efficient ICollection<T>.CopyTo method instead of enumerating the sequence.请注意, Enumerable.ToList调用列表构造函数,该构造函数首先检查参数是否可以强制转换为ICollection<T> (数组实现),然后它将使用更有效的ICollection<T>.CopyTo方法而不是枚举序列。

The simplest method is:最简单的方法是:

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

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

or或者

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

In the case you want to return an array of enums as a list you can do the following.如果您想将枚举数组作为列表返回,您可以执行以下操作。

using System.Linq;

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

You can do like this basically:你基本上可以这样做:

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

this is your array, and than you can call your new list like this:这是你的数组,你可以像这样调用你的新列表:

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

You can do this for complex object too.您也可以对复杂对象执行此操作。

in vb.net just do this在 vb.net 中就这样做

mylist.addrange(intsArray)

or或者

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

You can just give it try to your code:你可以试试你的代码:

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;

Then you can just use the anyVariable as your code.然后你可以使用 anyVariable 作为你的代码。

I know two methods:我知道两种方法:

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

Or,或者,

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

I'm assuming you know about data types and will change the types as you please.我假设您了解数据类型,并且会根据需要更改类型。

Just use the existing method.. .ToList();只需使用现有方法.. .ToList();

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

KISS(KEEP IT SIMPLE SIR)亲吻(保持简单,先生)

I hope this is helpful.我希望这是有帮助的。

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

get string value获取字符串值

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

get integer value获取整数值

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM