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


96

你能List<int>List<string>某种方式投下吗?

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

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

Answers:


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

116

2010年更新

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

6
谢谢!这为我节省了大量时间
Steve French

2
不,Lambda是C#3.0中引入的,因此在2.0中将不起作用。
路加

我发现只要您至少安装了.NET 3.0,它就可以与VS2008和.NET 2.0一起使用。看到stackoverflow.com/questions/3341846/...
igelineau

1
人们应该区分.NET版本和C#版本。由于箭头在这种情况下x => x.ToString()被编译为相同类型的IL,delegate(int x) { return x.ToString(); }所以重要的是要有一个C#编译器(C#版本)来知道什么=>。框架和运行时(.NET版本)不需要特殊功能,因此.NET 2.0很好。
杰普·斯蒂格·尼尔森

原来你可以抛弃<string>它,但它仍然有效。做到这一点l1.ConvertAll(x => x.ToString());
ʙᴀᴋᴇʀ

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

遵循这些原则。


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


6

您可以使用:

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

5

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

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

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


3
泛型类型之间是否存在强制转换与投射之间的强制转换能力无关。IE,即使int可以隐式或显式转换为string,也并不意味着List<int>具有隐式或显式转换List<string>
亚当·罗宾逊

1

您必须建立一个新列表。的基础位表示形式List<int>List<string>完全不兼容-例如,在64位平台上,单个成员的大小甚至不相同。

从理论上讲,将a List<string>视为是可能的List<object>-这将使您进入令人兴奋的协方差和反方差世界,并且C#或VB.NET当前不支持。


@Curt:>从理论上讲,可以将> List <string>视为List <object>->这将使您进入令人兴奋的协方差和协变世界,并且> C#或> VB当前不支持>。 NET C#和.NET实际上确实支持协方差。只是没有泛型。
Christian Hagelid

1

result = listOfInt.Select(i => i.ToString(CultureInfo.InvariantCulture)).ToList()

将参数结果和listOfInt替换为您的参数


对我来说正确工作结果= listOfInt.Select(i => i.ToString())。ToList();
Sharunas Bielskis
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.