我想将 a 转换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]));
}
)
我想将 a 转换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]));
}
)
您可以使用而不是使用 LINQList<T>.ConvertAll<TOutput>(...)
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;
}
}
在这种情况下,只有数字 int 值被解析,其余的被优雅地忽略。如果你愿意,你可以内置一些错误处理/通知。
/Edit 基于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()
使用 Linq:
var intList = stringList.Select(x => int.Parse(x)).ToList();
使用以下代码:
int x = 0;
var intList= stringList.Where(str => int.TryParse(str, out x)).Select(str => x).ToList();
谢谢大家。能在这里得到多少帮助真是太棒了!我终于通过将字符串列表转换为数组,然后将数组转换为 int 来解决问题。也许不是最聪明的解决方案,但我的代码现在可以工作了。稍后我会尝试您的建议,看看我是否仍然可以使用列表而不是数组。谢谢大家!
如果您不想使用 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;
}
您的方法运行良好,因此我假设您是仍在学习该语言语法的初学者开发人员。我暂时不会为您提供高级 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
,但是要小心,因为此方法的工作方式略有不同并使用out
参数。您可以在此处了解更多信息。
如果您对 LINQ 感兴趣,@Peter Kiss 的解决方案将尽其所能。他正在使用带有方法语法的 LINQ,但也有类似 SQL 的语法,您可能会或可能不会觉得更容易掌握。可以在此处找到对 LINQ 的一个很好的介绍。
如果您的 stringList 有一个无法解析的字符串,那么您可以使用默认的错误/无效值 -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();