将列表转换为.NET 2.0中的列表

时间:2020-03-05 18:47:57  来源:igfitidea点击:

我们能以某种方式将List <int>强制转换为List <string>吗?

我知道我可以循环遍历和.ToString(),但是强制转换会很棒。

我在C2.0中(所以没有LINQ)。

解决方案

回答

C2.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(); });

遵循这些原则。

赞成格伦的答案,这可能是正确的代码;-)

回答

我们必须建立一个新列表。 List <int>和List <string>的底层位表示形式是完全不兼容的-例如,在64位平台上,各个成员的大小甚至都不相同。

从理论上讲,可以将List <string>视作List <object>,这使我们进入令人兴奋的协方差和协变世界,而Cor VB.NET目前不支持。

回答

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

foreach (int i in intList) stringList.Add(i.ToString());

编辑或者正如其他人指出的那样,使用intList.ConvertAll(delegate(int i){return i.ToString();});,但是显然我们仍然必须使用.ToString(),这是一种转换,而不是投。

回答

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

回答

2010年更新

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