【发布时间】:2008-09-04 23:06:56
【问题描述】:
你能以某种方式将List<int> 转换为List<string> 吗?
我知道我可以循环使用 .ToString() 这个东西,但是演员阵容会很棒。
我在 C# 2.0 中(所以没有LINQ)。
【问题讨论】:
你能以某种方式将List<int> 转换为List<string> 吗?
我知道我可以循环使用 .ToString() 这个东西,但是演员阵容会很棒。
我在 C# 2.0 中(所以没有LINQ)。
【问题讨论】:
.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() 被编译为与delegate(int x) { return x.ToString(); } 相同类型的IL,在这种情况下,重要的是要有一个知道=> 是什么的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(); });
类似的东西。
支持 Glenn 的答案,这可能是正确的代码 ;-)
【讨论】:
你可以使用:
List<int> items = new List<int>(new int[] { 1,2,3 } );
List<string> s = (from i in items select i.ToString()).ToList();
【讨论】:
由于不存在从 int 到字符串的显式或隐式转换,因此您将无法直接转换它,它 必须 是一个涉及 .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>。
result = listOfInt.Select(i => i.ToString(CultureInfo.InvariantCulture)).ToList()
将参数 result 和 listOfInt 替换为您的参数
【讨论】:
你必须建立一个新的列表。 List<int> 和 List<string> 的底层位表示完全不兼容——例如,在 64 位平台上,各个成员的大小甚至都不相同。
理论上可以将List<string> 视为List<object> - 这将带您进入令人兴奋的协变和逆变世界,目前C# 或VB.NET 不支持。
【讨论】:
除了通常的 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();
【讨论】: