список <int>показывает ноль - PullRequest
0 голосов
/ 24 марта 2012
string[] baChildrenIds = ids.Split(',');
                    List<int> intList = new List<int>();
                    foreach (var id in baChildrenIds)
                    {
                        intList.Add(Convert.ToInt32(id));
                    }
                    List<int> tempList = new List<int>();
                    if (Session["SelectedList"] != null)
                    {
                        var temp = Session["SelectedList"] as List<int>;
                        tempList.AddRange(temp);
                    }
                    Session["SelectedList"] = tempList.Union(intList);

Начальное добавление Я добавляю два целых значения в сеанс.во второй раз я добавляю три целочисленных значения в сессию.

когда я получаю доступ к сессии, что-то вроде этого, я всегда получаю ноль.как получить все значения сеанса в виде списка?

Спасибо

Ответы [ 5 ]

3 голосов
/ 24 марта 2012

В классе List нет метода Union.Этот метод выходит из расширений LINQ и возвращает IEnumerable в вашем случае.IEnumerable - это не список.Если бы вы использовали приведение, а не «как», вы бы увидели ошибку во время выполнения.Все, что вам нужно сделать, это прикрепить .ToList () к концу последней строки.

2 голосов
/ 24 марта 2012

Операция Union Linq возвращает IEnumerable.При назначении переменной сеанса попробуйте вместо этого:

Session["SelectedList"] = tempList.Union(intList).ToList();
2 голосов
/ 24 марта 2012
Session["SelectedList"] = tempList.Union(intList).ToList();

Метод Union возвращает IEnumerable, а не List.

Надеюсь, это поможет.

2 голосов
/ 24 марта 2012

Оператор as возвращает ноль, если приведение не выполнено.

В вашем случае Session["SelectedList"] не относится к типу List<int>, поэтому null возвращается.

Вызов .Union не возвращает List<int>,но вместо IEnumerable<int>Звоните .ToList(), чтобы преобразовать его в List<int>

1 голос
/ 24 марта 2012

когда вы назначаете сеанс, ваш сеанс становится System.Linq.Enumerable.UnionIterator<int> введите, и при доступе к сеансу вы конвертируете его в List<int>, что не совпадает, поэтому выдает ошибку.

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

if (Session["SelectedList"] != null)

  {

  List<int> ls = (List<int>)Session["SelectedList"];           
  var temp = ls;

  tempList.AddRange(temp);
  }

Session["SelectedList"] = tempList.Union(intList).ToList(); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...