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

Posted

技术标签:

【中文标题】在 .NET 2.0 中将 List<int> 转换为 List<string>【英文标题】:Cast List<int> to List<string> in .NET 2.0 【发布时间】:2008-09-04 23:06:56 【问题描述】:

你能以某种方式将List&lt;int&gt; 转换为List&lt;string&gt; 吗?

我知道我可以循环使用 .ToString() 这个东西,但是演员阵容会很棒。

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

2010 年更新

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

【讨论】:

谢谢!这为我节省了大量时间 不,lambdas 是在 C# 3.0 中引入的,所以这在 2.0 中不起作用。 我发现它适用于 VS2008 和 .NET 2.0,只要您至少安装了 .NET 3.0。见***.com/questions/3341846/… 人们应该区分 .NET 版本和 C# 版本。由于箭头x =&gt; x.ToString() 被编译为与delegate(int x) return x.ToString(); 相同类型的IL,在这种情况下,重要的是要有一个知道=&gt; 是什么的C# 编译器(C# 版本)。框架和运行时(.NET 版本)不需要特殊功能,所以 .NET 2.0 在这里就可以了。 原来你可以放弃&lt;string&gt;,它仍然有效。让它只是l1.ConvertAll(x =&gt; x.ToString());【参考方案3】:

C# 2.0 能做到List&lt;T&gt;.Convert 吗?如果是这样,我认为您最好的猜测是将其与代表一起使用:

List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
list.Convert(delegate (int i)  return i.ToString(); );

类似的东西。


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

【讨论】:

【参考方案4】:

你可以使用:

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

【讨论】:

【参考方案5】:

由于不存在从 int 到字符串的显式或隐式转换,因此您将无法直接转换它,它 必须 是一个涉及 .ToString() 的方法,例如:-

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

编辑 - 或者正如其他人相当出色地指出的那样,使用 intList.ConvertAll(delegate(int i) return i.ToString(); );,但显然你仍然必须使用.ToString() 它是一种转换而不是强制转换。

【讨论】:

泛型类型之间的转换的存在与投影之间的转换能力无关。 IE,即使int 隐式或显式转换为string,这并不意味着List&lt;int&gt; 隐式或显式转换为List&lt;string&gt;【参考方案6】:

result = listOfInt.Select(i =&gt; i.ToString(CultureInfo.InvariantCulture)).ToList()

将参数 result 和 listOfInt 替换为您的参数

【讨论】:

对我来说工作正常 result = listOfInt.Select(i => i.ToString()).ToList();【参考方案7】:

你必须建立一个新的列表。 List&lt;int&gt;List&lt;string&gt; 的底层位表示完全不兼容——例如,在 64 位平台上,各个成员的大小甚至都不相同。

理论上可以将List&lt;string&gt; 视为List&lt;object&gt; - 这将带您进入令人兴奋的协变和逆变世界,目前C# 或VB.NET 不支持。

【讨论】:

@Curt: > 理论上可以将 > 一个 List 视为一个 List -- > 这会让你进入令人兴奋的世界 > 协变和逆变,并且 > 是C# 或 > VB.NET 当前不支持 C# 和 .NET 实际上支持协方差。只是没有泛型。【参考方案8】:

除了通常的 ToString() 之外,还可以通过两种额外的方式将 int List 转换为 string List。选择你更喜欢的那个。

var stringlist = intlist.Select(x=>""+x).ToList();

也可以:

var stringlist = intlist.Select(x=>$"x").ToList();

最后是传统的:

var stringlist = intlist.Select(x=>x.ToString()).ToList();

【讨论】:

以上是关于在 .NET 2.0 中将 List<int> 转换为 List<string>的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中将 List<IEnumerable<int>> 转换为 List<int> [重复]

如何在 Java 中将 int[] 转换为 List<Integer>?

如何将字典的值复制到 .Net 2.0 中的 IList 对象中?

如何在 Swift 2.0 中将 HKQuanity 转换为 Int

如何在 Swift 2.0 中将 HKQuanity 转换为 Int

如何在 .NET 6 / C# 10 中将 List<String?> 转换为 List<String>?