我想将List<string>
转换为List<int>
。
这是我的代码:
void Convert(List<string> stringList)
{
List<int> intList = new List<int>();
for (int i = 0; i < stringList.Count; i++)
{
intList.Add(int.Parse(stringList[i]));
}
)
答案 0 :(得分:23)
您可以使用List<T>.ConvertAll<TOutput>(...)
List<int> intList = stringList.ConvertAll(int.Parse);
答案 1 :(得分:13)
我建议使用TryParse()
,以防某些值无法转换为int
。
为此,我创建了一个扩展方法。下面是我的演示LinqPad代码。
void Main()
{
List<string> sourceList = new List<string> {"1", "2","3", "qwert","4", "5","6", "7","asdf", "9","100", "22"};
//Dump is a LinqPad only method. Please ignore
sourceList.ConvertToInt().Dump();
}
static public class HelperMethods
{
static public List<int> ConvertToInt(this List<string> stringList)
{
int x = 0;
var intList = stringList.Where(str => int.TryParse(str, out x))
.Select (str => x)
.ToList();
return intList;
}
}
在这种情况下,只解析数字int值,并优雅地忽略其余值。如果您愿意,可以内置一些错误处理/通知。
<强> /修改 基于Peter Kiss'建议,这是一种基于IEnumerable接口的更通用的方法。
static public IEnumerable<int> ConvertToInt(this IEnumerable<string> source)
{
int x = 0;
var result = source.Where(str => int.TryParse(str, out x))
.Select (str => x);
return result;
}
使用此功能,您只需在致电AsEnumerable()
之前致电ConvertToInt()
。结果当然是IEnumerable<Int32>
类型,从此处开始,您可以轻松将其转换为列表使用.ToList()
或数组或此时需要的任何内容。
答案 2 :(得分:5)
Linq:
var intList = stringList.Select(x => int.Parse(x)).ToList();
答案 3 :(得分:1)
如果您不想使用Linq(我总是很难理解),您的代码看起来是正确的,但当然您需要返回一些内容:
List<int> Convert(List<string> stringList)
{
List<int> intList = new List<int>();
for (int i = 0; i < stringList.Count; i++)
{
intList.Add(int.Parse(stringList[i]));
}
return intList;
}
请注意,如果字符串列表包含不能作为int解析的内容,则会抛出异常。
修改强> 更好的是,使用foreach循环:
List<int> Convert(List<string> stringList)
{
List<int> intList = new List<int>();
foreach(String s in stringList)
{
intList.Add(int.Parse(s));
}
return intList;
}
答案 4 :(得分:1)
使用以下代码:
int x = 0;
var intList= stringList.Where(str => int.TryParse(str, out x)).Select(str => x).ToList();
答案 5 :(得分:0)
您的方法运行正常,所以我假设您是一名初学者,仍然在学习该语言的语法。我还不会给你高级LINQ解决方案,但可以帮助你用你当前的代码实现你想要的。您当前没有返回正在创建的列表,因此请更改方法签名:
void Convert(List<string> stringList)
为:
List<int> Convert(List<string> stringList)
并在方法结束前的最后添加:
return intList;
然后在你的代码中你可以像这样调用它:
List<string> strings = new List<string> { "1", "2", "3" };
List<int> integers = this.Convert(strings);
注意:如果您不希望代码抛出异常,我建议您使用TryParse
而不是Parse
,但请注意,因为此方法的工作方式稍有不同,并使用{{ 1}}参数。您可以详细了解here。
如果您对LINQ感兴趣,@ Pee Kiss的解决方案就像它一样好。他正在使用带有方法语法的LINQ,但是也有类似SQL的语法,您可能会或者可能不会更容易理解。可以找到LINQ的一个很好的介绍here。
答案 6 :(得分:0)
谢谢大家。能在这里获得多少帮助真是太棒了! 我最终通过将字符串列表设置为Array,然后将Array转换为int来解决问题。也许不是最聪明的解决方案,但我的代码现在有效。我稍后会尝试你的建议,看看我是否仍然可以使用list而不是Array。 谢谢大家!
答案 7 :(得分:-1)
如果您的stringList有一个无法解析的字符串,那么您可以使用默认错误/无效值say -1来掩盖它,而不是遇到异常,如下所示:
List<string> stringList = new List<string>();
stringList.AddRange(new string[] { "1", "2", "3", "4", "sdfsf", "7" }); // for illustration
int temp;
var yourIntegerList = stringList.Select(x => int.TryParse(x, out temp) ? int.Parse(x) : -1).ToList(); // -1 used here, can be any integer
//现在你可以删除所有-1的
yourIntegerList = yourIntegerList.Where(a => a != -1).ToList();