Я бы хотел общее решение , но в качестве примера предположим, что у меня есть 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. calling a method that could throw
var myClassInstances = new MyClass[] { new MyClass(), new MyClass(CauseMethodToThrow:true) };
var myClassResultOfMethod = myClassInstances.Select(mci => mci.MethodThatCouldThrow()).SkipExceptions();
Как мне написать метод расширения SkipExceptions()
?
Некоторые отличные ответы для метода SelectSkipExceptions()
, однако мне интересно, можно ли создать метод SkipExceptions()
, по той же схеме, что и AsParallel()
.