Один из способов:
IEnumerable<int> ints = strings.Where(str => str.All(Char.IsDigit))
.Select(str => int.Parse(str));
Это выбирает только строки, где все символы являются цифры. Затем он анализирует их на int
.
Лучший способ заключается в использовании этого расширения:
public static int? TryGetInt(this string item)
{
int i;
bool success = int.TryParse(item, out i);
return success ? (int?)i : (int?)null;
}
Затем вы можете использовать этот запрос:
IEnumerable<int> ints = strings.Select(str => str.TryGetInt())
.Where(nullableInt => nullableInt.HasValue)
.Select(nullableInt => nullableInt.Value);
Поведение значения 'temp' недокументированная деталь реализации и может изменяться в будущем. Вместо этого я предпочитаю [расширение] (http://stackoverflow.com/a/19091443/284240). –
@TimSchmelter: Действительная точка. Однако вышеприведенное решение остается верным, если конечное значение «temp» не используется последующим кодом. Можно было бы приложить приведенный выше фрагмент кода в выделенном блоке оператора, чтобы обеспечить его выполнение. – Douglas