Как обрабатывать ((List <string>) Session.Add ("") - PullRequest
4 голосов
/ 14 августа 2010
((List<string>)Session["answera"]).Add(xle.InnerText); 

Мне нужно выполнить эту операцию, но я получаю «Ссылка на объект не установлена ​​на экземпляр ....» Я не хочу использовать

 List<string> ast = new List<string>();
    ast.Add("asdas!");
    Session["stringList"] = ast;
    List<string> bst = (List<string>)Session["stringList"];

поскольку я просто хочу добавить строку в Session-String-Array.

Ответы [ 4 ]

4 голосов
/ 14 августа 2010

Задумывались ли вы об упаковке вашего List<string> в свойство пользовательского объекта контекста? Мне пришлось сделать что-то подобное в приложении, поэтому я закончил тем, что создал для меня объект UserContext со свойством Current, который позаботился о создании новых объектов и сохранении их в сеансе. Вот основной код, настроенный для вашего списка:

public class UserContext
{
    private UserContext()
    {
    }

    public static UserContext Current
    {
        get
        {
            if (HttpContext.Current.Session["UserContext"] == null)
            {
                var uc = new UserContext
                             {
                                 StringList = new List<string>()
                             };

                HttpContext.Current.Session["UserContext"] = uc;
            }

            return (UserContext) HttpContext.Current.Session["UserContext"];
        }
    }

    public List<string> StringList { get; set; }

}

Я на самом деле получил большую часть этого кода и структуры от этого ТАКОГО вопроса .

Поскольку этот класс является частью моего Web пространства имен, я обращаюсь к нему так же, как и к объекту HttpContext.Current, поэтому мне никогда не нужно ничего явно приводить.

3 голосов
/ 14 августа 2010

Если вы получаете исключение нулевой ссылки, это потому, что либо сессия не содержит список, как вы думаете, либо "xle" является нулевым.Есть ли какая-то причина, по которой вы думаете, что сессия уже содержит ваш список?

1 голос
/ 14 августа 2010

Определите свойство, подобное этому, и используйте свойство вместо доступа к объекту Session

public List<string> StringList
{
     get
        {
           if (Session["StringList"] == null)
                   Session["StringList"] = new List<string>();

            return Session["StringList"] as List<string>;
         }
}

В любом месте вашего приложения вы просто делаете:

StringList.Add("test");
0 голосов
/ 14 августа 2010

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

((List<string>)Session["answera"]).Add(xle.InnerText);

но вы должны убедиться, что Session["answera"] не null.

Или попробуйте так:

string[] stringArray = {"asdas"};
List<string> stringList = new List<string>(stringArray);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...