在.NET 2.0中将List <int>转换为List <string>

lom*_*axx 94 c# generics casting

你能List<int>List<string>某种方式投出一个吗?

我知道我可以遍历和.ToString()这个东西,但是演员阵容会很棒.

我在C#2.0(所以没有LINQ).

Gle*_*ven 151

.NET 2.0具有ConvertAll可以传入转换器函数的方法:

List<int>    l1 = new List<int>(new int[] { 1, 2, 3 } );
List<string> l2 = l1.ConvertAll<string>(delegate(int i) { return i.ToString(); });
Run Code Online (Sandbox Code Playgroud)


Luk*_*uke 113

2010年更新

List<int> l1 = new List<int>(new int[] { 1,2,3 } );
List<string> l2 = l1.ConvertAll<string>(x => x.ToString());
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!这为我节省了大量时间 (6认同)
  • 不,lambda是在C#3.0中引入的,所以这在2.0中不起作用. (2认同)

Eri*_*kel 8

C#2.0能够做到List<T>.Convert吗?如果是这样,我认为你最好的猜测是与代表一起使用:

List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
list.Convert(delegate (int i) { return i.ToString(); });
Run Code Online (Sandbox Code Playgroud)

沿着那条线的东西.


Upvote Glenn的答案,这可能是正确的代码;-)


lut*_*cki 6

您可以使用:

List<int> items = new List<int>(new int[] { 1,2,3 } );
List<string> s = (from i in items select i.ToString()).ToList();
Run Code Online (Sandbox Code Playgroud)


ljs*_*ljs 5

您将无法直接转换它,因为从int到string不存在显式或隐式转换,它必须是涉及.ToString()的方法,例如: -

foreach (int i in intList) stringList.Add(i.ToString());
Run Code Online (Sandbox Code Playgroud)

编辑 - 或正如其他人指出的那样,使用intList.ConvertAll(delegate(int i){return i.ToString();});但是很明显你仍然必须使用.ToString()并且它是一个转换而不是演员.

  • 泛型类型之间存在强制转换与投影之间的投射能力无关.IE,即使`int`被隐式或显式转换为`string`,也不意味着`List <int>`有一个隐式或显式转换为`List <string>`. (3认同)