在处理后端配置或前端传来的逗号分隔数据时,我们经常需要将字符串形式的 ID 列表转换为整数集合。直接调用 int.Parse 遇到非数字字符会抛出异常,因此推荐封装一个安全的扩展方法。
安全转换的扩展方法
public static class Extension
{
public static int StringToInt32(this string str)
{
int num = -1;
if (int.TryParse(str, out num))
{
return num;
}
else
{
return -1;
}
}
}
这里使用 TryParse 避免异常开销,解析失败返回 -1。注意:如果业务中允许 ID 为 -1,此默认值会造成冲突,请根据实际情况调整。
转换为整型数组
利用 Array.ConvertAll 可以高效完成映射:
string IDList = "1,2,3,abc,5";
int[] selects = Array.ConvertAll(
IDList.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries),
s => s.StringToInt32()
);
转换为去重列表
如果需要去重并获取 List<int>,只需在末尾追加 Distinct().ToList():
List<int> selectList = Array.ConvertAll(
IDList.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries),
s => s.StringToInt32()
).Distinct().ToList();
这样既保留了代码的简洁性,又确保了转换过程不会因脏数据导致程序崩溃。

