将逗号分隔的字符串转换为int列表并进行验证

时间:2017-07-21 07:29:51

标签: c# linq

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

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

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

2 个答案:

答案 0 :(得分:3)

如果您想确认只有有效的整数才会到达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();

答案 1 :(得分:1)

您可以尝试使用TryParse代替Parse

List<int> list = model
   .Categories
   .Split(',')
   .Select(item => {
      int value;
      bool parsed = int.TryParse(item, out value);

      return new {
        parsed = parsed,
        value = value;
      };
    })
   .Where(item => item.parsed)
   .Select(item => item.value)
   .ToList();