Попробуйте парсинг из списка объектов в int | c# - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь вывести объекты из списка объектов в список int. Если значение списка объектов содержит строку, я хочу преобразовать ее в int. я получаю сообщение об ошибке: «невозможно преобразовать объект» в «System.ReadOnlySpan». Я пытался найти примеры и информацию о списках, составленных из объектов, но ничего не смог найти.

I Я также в растерянности относительно того, что делать с частью кода else.

public class ListFilterer
{
   public static IEnumerable(int) GetIntegersFromList(List(object) listOfItems)
   {

      List<int> Integers = new List<int>();

      foreach (var value in listOfItems)
      {
        int number = 0;

        bool success = Int32.TryParse(value, out number);

        if (success)
        {
          Integers.Add(number);
        }
        else
        {
          Integers.Add(number);
        }
      }
      return Integers;

   }
}

Ответы [ 4 ]

1 голос
/ 05 марта 2020

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

var ints = listOfItems
  .Select(o => { int.TryParse(o.ToString(), out int num); return num;} )
  .ToList();

Это будет работать так же, как вы sh, как если бы преобразование не удалось num по умолчанию равно 0.

1 голос
/ 05 марта 2020

Вероятно, сработает, если вместо этого вы попробуете value.ToString(), если вы ищете что-то, что может выглядеть как int и может быть преобразовано в int. Если вам нужны только вещи, которые на самом деле являются целочисленными, что-то вроде if(value is int number) должно работать, если ваша версия c# является последней. Если он старше, вам может потребоваться if(value is int), а затем привести значение внутри if

. Ваш код может быть упрощен до:

foreach(...){

  int.TryParse(value.ToString(), out var n);
  integers.Add(n);

}

или

foreach (. ..) {

  if(value is int)
    integers.Add((int)value);
  else 
    integers.Add(0);
}
0 голосов
/ 05 марта 2020

Может быть, вы можете найти лучший способ

var intList = objs.ConvertAll(delegate (object obj) { return (int)obj; });
0 голосов
/ 05 марта 2020

Если попытка разбора не удалась, число автоматически обнуляется, поэтому вы можете написать это

 Int32.TryParse(value, out int number)
 Integers.Add(number);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...