将列表转换为.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());