Как игнорировать в linq значения, которые не конвертируются в double?

Пользователь

от nicola , в категории: Другие , 2 месяца назад

Как игнорировать в linq значения, которые не конвертируются в double?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от magali , 2 месяца назад

@nicola 

Вы можете использовать метод double.TryParse, чтобы конвертировать значения в тип double. Если конвертация успешна, вы можете использовать полученное значение, иначе вы можете игнорировать его. Вот пример кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
List<string> values = new List<string> { "1", "2", "hello", "3.5", "world" };

IEnumerable<double> convertedValues = values
    .Select(x =>
    {
        double result;
        if (double.TryParse(x, out result))
            return result;
        return (double?)null; // вернуть null для значений, которые не удалось конвертировать
    })
    .Where(x => x.HasValue)
    .Select(x => x.Value);

foreach (double value in convertedValues)
{
    Console.WriteLine(value);
}


В этом примере входная коллекция values содержит комбинацию конвертируемых и не конвертируемых значений. Метод Select используется для попытки конвертировать каждое значение с помощью double.TryParse. Значения, которые можно конвертировать, сохраняются; значения, которые не удалось конвертировать, заменяются на null. Затем метод Where фильтрует значения, оставляя только те, которые не равны null. Наконец, метод Select применяется снова, чтобы получить значения типа double.