如何省略选择lambda中的值?

Mar*_*cel 3 c# linq lambda select

我想制作一个简单的CSV解析器.它应该通过逗号分隔值列表并将它们放在一个IList<int>.这些值应该是整数.如果值不可解析,我只想省略它.

这是我到目前为止的代码:

csv.Split(',').Select(item =>
{
    int parsed;
    if (int.TryParse(item, out parsed))
    {
        return parsed;
    }
    continue; //is not allowed here
}).ToList();
Run Code Online (Sandbox Code Playgroud)

但是,continue这里不允许使用(当然).如何在我的select实现中省略一个值?

注意:当然可以使用foreach或LINQ表达式,但我想知道如何使用lambda.

Mar*_*ell 9

怎么样:

public static IEnumerable<int> ExtractInt32(this IEnumerable<string> values) {
    foreach(var s in values) {
        int i;
        if(int.TryParse(s, out i)) yield return i;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后:

var vals = csv.Split(',').ExtractInt32().ToList();
Run Code Online (Sandbox Code Playgroud)

这里的好东西:

  • 避免魔法"哨兵"号码(如int.MinValue)
  • 避免单独和断开连接的"它是有效的"/"解析"步骤(所以没有重复)

  • @Marcel有时,如果问题是"驱动螺丝的最佳锤子是什么?",最合适的答案是螺丝刀代替. (2认同)