Answers:
.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());
x => x.ToString()
被编译为相同类型的IL,delegate(int x) { return x.ToString(); }
所以重要的是要有一个C#编译器(C#版本)来知道什么=>
。框架和运行时(.NET版本)不需要特殊功能,因此.NET 2.0很好。
<string>
它,但它仍然有效。做到这一点l1.ConvertAll(x => x.ToString());
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(); });
遵循这些原则。
支持格伦的答案,这可能是正确的代码;-)
由于从int到string不存在显式或隐式转换,因此您将无法直接对其进行转换,它必须是涉及.ToString()的方法,例如:
foreach (int i in intList) stringList.Add(i.ToString());
编辑 -或正如其他人指出的那样,使用intList.ConvertAll(delegate(int i){return i.ToString();});,但是显然您仍然必须使用.ToString(),这是一种转换而不是一个演员。
int
可以隐式或显式转换为string
,也并不意味着List<int>
具有隐式或显式转换List<string>
。
您必须建立一个新列表。的基础位表示形式List<int>
和List<string>
完全不兼容-例如,在64位平台上,单个成员的大小甚至不相同。
从理论上讲,将a List<string>
视为是可能的List<object>
-这将使您进入令人兴奋的协方差和反方差世界,并且C#或VB.NET当前不支持。
result = listOfInt.Select(i => i.ToString(CultureInfo.InvariantCulture)).ToList()
将参数结果和listOfInt替换为您的参数