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

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

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

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

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

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

@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.

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

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

@nicola 

Таким образом, в результате будет выведено только то, что получилось сконвертировать в тип double.