C# 如何将列表转换为字符串[]?

C# 如何将列表转换为字符串[]?,c#,arrays,list,C#,Arrays,List,我需要一种将列表转换为字符串数组的简单方法 我有: var the_list = new List<int>(); the_list.Add(1); the_list.Add(2); the_list.Add(3); string[] the_array = new string[the_list.Count]; for(var i = 0 ; i < the_array.Count; ++i) the_array[i] = the_list[i].ToString(

我需要一种将列表转换为字符串数组的简单方法

我有:

var the_list = new List<int>();
the_list.Add(1);
the_list.Add(2);
the_list.Add(3);

string[] the_array = new string[the_list.Count];
for(var i = 0 ; i < the_array.Count; ++i)
    the_array[i] = the_list[i].ToString();
…这对我来说很难看

有没有更简单的方法

注意:我正在寻找一种更简单的方法-不一定是更快的方法。

使用LINQ:

string[] the_array = the_list.Select(i => i.ToString()).ToArray();

很抱歉,我没有在此计算机上安装.NET,因此完全未经测试:

var theList = new List<int>() { 1, 2, 3 };

var theArray = theList.Select(e => e.ToString()).ToArray();       // Lambda Form
var theArray = (from e in theList select e.ToString()).ToArray(); // Query Form

列表有一个ToArray方法。它可以节省您的打字时间,但效率可能不会更高。

我知道您的答案很好,但您不需要LINQ或Select。您可以使用ConvertAll和匿名方法来完成。像这样:

var list = new List<int>();
....
var array = list.ConvertAll( x => x.ToString() ).ToArray(); 

类似的想法,但我认为这不是linq。这很重要。

因为您的列表只有一个数字,所以您可以轻松地将它们转换为字符串。只需创建一个循环并将其成员转换为字符串

string[] the_array = new string[the_list.Count];
int i=0;
foreach(var item in the_list)
{
  the_array[i] = item.ToString();
  i++;
}

注意:虽然我肯定会选择这里列出的Select.ToArray方法,但它不太可能比您已经使用的更快。你的方法是直截了当的,可能是最有效的方法。再一次我选择了@Etienne de Martel建议的更易于阅读/维护的Select.ToArray LINQ方法,但您的问题表明您的选择效率低下。您知道是否可以传递一个未绑定的方法进行选择,并让它自动将其绑定到元素,类似于Ruby的Symbolto_proc技巧?例如,类似于\u list.Selectint.ToString的内容?对于Haskell人:我基本上是在问是否有无点解决方案。@Ben Voigt你能解释一下为什么这段代码不快吗?@jb:因为它很可能需要将所有字符串累积到一个动态大小的集合中,然后在知道最终大小后,分配数组并复制所有元素。在本例中,在查询开始执行之前,计数是已知的,但LINQ库无法知道选择委托不会更改列表的长度。JIT编译器有,但它没有上下文知识来了解它是如何有用的。@Jorg:是的,创建一个未绑定的委托是可能的。但它没有语法上的甜头,必须直接调用反射API。它也不会将数组从int转换为string。值得一提的是,ToArray是枚举类上的一个静态方法,在我看来,它是LINQ。此外,这很可能比使用Select效率低:ConvertAll将在您将列表转换为数组之前创建一个中间列表;Select不需要创建中间列表。@LukeH不,它不是LINQ。这是最有效的方法,除非数组中有许多重复的元素。当然,这并不意味着这一定是最简单的方法。你似乎在问两个不同的问题:什么更有效,什么更容易。在我看来,这两个问题的答案是不同的:@Brian:我问的是哪一个更容易-很抱歉造成混淆。请在你的答案中添加一些解释。简单地发布代码可能会令人困惑。