I'd like a general solution but as an example, assume i have an IEnumerable<string>
, where some can be parsed as integers, and some cannot.
var strings = new string[] { "1", "2", "notint", "3" };
Obviously if i did Select(s => int.Parse(s, temp))
it'd throw an exception when enumerated.
In this case i could do .All(s => int.TryParse(s, out temp))
first, however i want a general solution where i don't have to enumerate the IEnumerable
twice.
Ideally i'd like to be able to do the following, which calls my magic exception skipping method:
// 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. calling a method that could throw
var myClassInstances = new MyClass[] { new MyClass(), new MyClass(CauseMethodToThrow:true) };
var myClassResultOfMethod = myClassInstances.Select(mci => mci.MethodThatCouldThrow()).SkipExceptions();
How can i write the SkipExceptions()
extension method?
Some great answers for a SelectSkipExceptions()
method, however i wonder if a SkipExceptions()
method could be created, along the same lines as AsParallel()
.