Анализировать
В этом случае используется пользовательский делегат (мог бы использовать вместо него интерфейс IParser<T>
, но я использовал делегат, поскольку он был проще), который используется для анализа последовательности строк в последовательности значений, пропуская элементы, где синтаксический анализ не удается.
public delegate bool TryParser<T>(string text, out T value);
public static IEnumerable<T> Parse<T>(this IEnumerable<string> source,
TryParser<T> parser)
{
source.ThrowIfNull("source");
parser.ThrowIfNull("parser");
foreach (string str in source)
{
T value;
if (parser(str, out value))
{
yield return value;
}
}
}
Использование:
var strings = new[] { "1", "2", "H3llo", "4", "five", "6", "se7en" };
var numbers = strings.Parse<int>(int.TryParse);
foreach (int x in numbers)
{
Console.WriteLine(x);
}
Выход:
1
2
4
6
Называть сложно для этого. Я не уверен, является ли Parse
лучшим вариантом (по крайней мере, просто ) или что-то вроде ParseWhereValid
будет лучше.