c# - 将逗号分隔的字符串转换为 int 列表并验证

标签 c# linq

我已将逗号分隔的字符串转换为列表。 列表包含空值或无效值时出现问题,如何跳过无效值?

List<int> list = model.Categories.Split(',').Select(int.Parse).ToList();

字符串将是 "10,12,3.0,4,1k,5,0.0";

最佳答案

如果您想验证只有有效的整数才能到达Select,请使用int.TryParse:

int num;
var result = model.Categories.Split(',')
                  .Where(i => int.TryParse(i, out num))
                  .Select(int.Parse).ToList();

如果使用 C#7.0 则可以:

var result = model.Categories.Split(',')
                  .Where(i => int.TryParse(i, out int num))
                  .Select(int.Parse).ToList();

为了不必解析两次你也可以尝试这样的事情:

Func<string, int?> ParseOrDefault = (input) => 
    int.TryParse(input, out int num) ? (int?)num : null;
var result = data.Split(',').Select(ParseOrDefault).Where(i => i != null).ToList();

或者更好:

var result = data.Split(',')
                 .Select(i => int.TryParse(i, out int num) ? (int?)num : null)
                 .Where(i => i != null).ToList();

关于c# - 将逗号分隔的字符串转换为 int 列表并验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45231645/

相关文章:

c# - 使用 C# 反射,如果该对象是列表内部对象的属性,如何获取对象的属性及其值

c# - 获取图像的文件大小

c# - C#中字典的使用

c# - C# 2.0 中的随机分钟数

c# - 当我为类的字段赋值时,添加一些与特定字段关联的元数据?

c# - Linq查询问题

c# - 使用 linq C# 将列表转换为嵌套字典

c# - 具有多个 Contains/Any 的 Linq

linq - .Include() 在 linq 语句中的位置?

c# - 在 Asp.net 中使用 Linq 创建 A-Z 索引的最佳实践