我想把一个 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]));
}
)
我想把一个 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]));
}
)
你可以使用 List<T>.ConvertAll<TOutput>(...)
代替 LINQ。
List<int> intList = stringList.ConvertAll(int.Parse);
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;
}
}
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;
}
ConvertToInt()
之前调用AsEnumerable()
。结果当然是IEnumerable<Int32>
类型,从这里开始,您可以通过使用.ToList()
将其轻松转换为列表或数组,或者在该点上需要什么。var intList = stringList.Select(x => int.Parse(x)).ToList();
=>
左侧的参数列表与Parse
方法的参数列表相同,因此可以简化为... .Select(int.Parse). ...
。 - Jeppe Stig Nielsenint x = 0;
var intList= stringList.Where(str => int.TryParse(str, out x)).Select(str => x).ToList();
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;
}
List<int> Convert(List<string> stringList)
{
List<int> intList = new List<int>();
foreach(String s in stringList)
{
intList.Add(int.Parse(s));
}
return intList;
}
foreach
而不是for
是很自然的。或者使用Linq,就像你所写的那样。 - Jeppe Stig Nielsen非常感谢大家,这里提供的帮助真是太棒了! 我最终通过将字符串列表转换为数组,然后将数组转换为整数来解决了问题。也许不是最明智的解决方案,但我的代码现在正常工作。稍后我将尝试您的建议,看看是否仍然可以使用列表而不是数组。 再次感谢大家!
void Convert(List<string> stringList)
to:
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
,但要小心,因为这种方法的工作方式略有不同,并且使用了out
参数。您可以在此处了解更多信息。
如果您对LINQ感兴趣,@Peter Kiss的解决方案是最好的。他使用方法语法与LINQ一起使用,但也有类似SQL的语法,您可能会发现它更容易理解。关于LINQ的良好介绍可以在此处找到。
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();
intList
。将void
改为intList
并返回intList
是很自然的。 - Jeppe Stig Nielsen