我想要一个通用的解决方案,但作为一个例子,假设我有一个IEnumerable<string>,其中一些可以解析为整数,有些不能.
var strings = new string[] { "1", "2", "notint", "3" };
显然,如果我这样做,Select(s => int.Parse(s, temp))它会在枚举时抛出异常.
在这种情况下,我可以先做.All(s => int.TryParse(s, out temp)),但我想要一个通用的解决方案,我不必枚举IEnumerable两次.
理想情况下,我希望能够执行以下操作,它调用我的魔术异常跳过方法:
// e.g. parsing strings
var strings = new string[] { "1", "2", "notint", "3" };
var numbers = strings.Select(s => int.Parse(s)).SkipExceptions();
// e.g. encountering null object
var objects = new object[] { new object(), new object(), null, new object() }
var objecttostrings = objects.Select(o => o.ToString()).SkipExceptions();
// e.g. …我想制作一个简单的CSV解析器.它应该通过逗号分隔值列表并将它们放在一个IList<int>.这些值应该是整数.如果值不可解析,我只想省略它.
这是我到目前为止的代码:
csv.Split(',').Select(item =>
{
    int parsed;
    if (int.TryParse(item, out parsed))
    {
        return parsed;
    }
    continue; //is not allowed here
}).ToList();
但是,continue这里不允许使用(当然).如何在我的select实现中省略一个值?
注意:当然可以使用foreach或LINQ表达式,但我想知道如何使用lambda.