在C#中将List 转换为List

我想将List转换为List

这是我的代码:

 void Convert(List stringList) { List intList = new List(); for (int i = 0; i < stringList.Count; i++) { intList.Add(int.Parse(stringList[i])); } ) 

您可以使用List.ConvertAll(...)而不是使用LINQ List.ConvertAll(...)

 List intList = stringList.ConvertAll(int.Parse); 

我建议使用TryParse() ,以防某些值无法转换为int 。 为此,我创建了一个扩展方法。 下面是我的演示LinqPad代码。

 void Main() { List sourceList = new List {"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 ConvertToInt(this List stringList) { int x = 0; var intList = stringList.Where(str => int.TryParse(str, out x)) .Select (str => x) .ToList(); return intList; } } 

在这种情况下,只解析数字int值,并优雅地忽略其余值。 如果您愿意,可以内置一些error handling/通知。

/编辑基于Peter Kiss的建议是基于IEnumerable接口的更通用的方法。

 static public IEnumerable ConvertToInt(this IEnumerable source) { int x = 0; var result = source.Where(str => int.TryParse(str, out x)) .Select (str => x); return result; } 

有了这个你只需要在调用ConvertToInt() AsEnumerable()之前调用AsEnumerable()结果当然是IEnumerable类型,从这里开始,你可以使用.ToList()或数组轻松地将它转换为List或者你需要的任何东西。

有了Linq:

 var intList = stringList.Select(x => int.Parse(x)).ToList(); 

如果您不想使用Linq(我总是很难理解),您的代码看起来是正确的,但当然您需要返回一些内容:

 List Convert(List stringList) { List intList = new List(); for (int i = 0; i < stringList.Count; i++) { intList.Add(int.Parse(stringList[i])); } return intList; } 

请注意,如果字符串列表包含不能作为int解析的内容,则会抛出exception。

编辑:更好的是,使用foreach循环:

 List Convert(List stringList) { List intList = new List(); foreach(String s in stringList) { intList.Add(int.Parse(s)); } return intList; } 

使用以下代码:

 int x = 0; var intList= stringList.Where(str => int.TryParse(str, out x)).Select(str => x).ToList(); 

你的方法工作正常,所以我假设你是一个初学者,仍然在学习语言的语法。 我还不会给你高级的LINQ解决方案,但可以帮助你用你当前的代码实现你想要的。 您当前没有返回正在创建的列表,因此请更改方法签名:

 void Convert(List stringList) 

至:

 List Convert(List stringList) 

并且在方法结束之前的最后添加:

 return intList; 

然后在你的代码中你可以像这样调用它:

 List strings = new List { "1", "2", "3" }; List integers = this.Convert(strings); 

注意:如果您不希望代码抛出exception,我建议使用TryParse而不是Parse ,但要小心,因为此方法的工作方式略有不同并且使用out参数。 你可以在这里了解更多相关信息。

如果您对LINQ感兴趣,@ Pee Kiss的解决方案就像它一样好。 他正在使用带有方法语法的LINQ,但是也有类似SQL的语法,您可能会或者可能不会更容易理解。 可以在这里找到LINQ的一个很好的介绍。

谢谢大家。 能在这里获得多少帮助真是太棒了! 我终于通过将字符串列表设置为Array,然后将Array转换为int来解决问题。 也许不是最聪明的解决方案,但我的代码现在有效。 我稍后会尝试你的建议,看看我是否仍然可以使用list而不是Array。 谢谢大家!

如果您的stringList有一个无法解析的字符串,那么您可以使用默认错误/无效值say -1来掩盖它,而不是遇到exception,如下所示:

  List stringList = new List(); 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();