Как преобразовать список строк в парные? - PullRequest
6 голосов
/ 29 июля 2010

РЕДАКТИРОВАТЬ: я пробовал эти два способа раньше -

List<double> doubleList =
stringList.ConvertAll(x => (double)x);

List<double> doubleList =
stringList.Select(x =>
(double)x).ToList();

и получил эту ошибку:

Невозможно преобразовать тип 'string' в'double '

Я читал о чем-то similiar , который конвертирует целые числа в двойники ... но у меня есть список строк, которые мне нужно преобразовать в список двойников, и ConvertAll () не работает, ни метод расширения Select , Может кто-нибудь, пожалуйста, помогите мне.

Ответы [ 5 ]

17 голосов
/ 29 июля 2010

Метод выбора должен работать, если вы используете .NET 3.5 или новее:

List<double> result = l.Select(x => double.Parse(x)).ToList();

Вот пример кода:

List<string> l = new List<string> { (0.1).ToString(), (1.5).ToString() };
List<double> result = l.Select(x => double.Parse(x)).ToList();
foreach (double x in result)
{
    Console.WriteLine(x);
}

Результат:

0,1
1,5

Следует помнить одну вещь: какую культуру вы используете для анализа строк. Возможно, вы захотите использовать перегрузку Parse, которая использует культуру, и использовать, например, CultureInfo.InvariantCulture.

4 голосов
/ 29 июля 2010

Вы можете использовать linq:

List<double> myList = myStringlist.ConvertAll(item => double.Parse(item));

Имейте в виду, что синтаксический анализ удваивается и с плавающей запятой - просто подумайте об этом:

100,00 100.00

-> Различные настройки локали

1 голос
/ 29 июля 2010

Вы можете использовать метод ForEach для List

List<double> dbl= new List<double>;
stringList.ForEach( str=> dbl.Add( double.parse( str ) ) );
0 голосов
/ 28 сентября 2016

Надеюсь, это может сработать: Список tmpDouble = tmpString.Select (x => (double?) Convert.ToDouble (x)). ToList ();

0 голосов
/ 29 июля 2010

Как насчет этого?

List<string> list = [your strings]
List<double> newList = new List<double>();
for(int i = 0; i < list.Count; i++)
{
  double d = 0;
  if(!double.TryParse(list[i], d)) //Error
  newList.Add(d);
}
...