Список универсальных объектов в C#

#c# #asp.net #asp.net-mvc-3

#c# #asp.net #asp.net-mvc-3

Вопрос:

У меня есть простой класс, который включает в себя 2 свойства, одну строку и один список универсальных объектов. Это выглядит следующим образом:

 public class SessionFieldViewModel
{
    private String _name;
    public String Name
    {
        get { return _name; }
        set { _name = value; }
    }

    private List<Object> _value;
    public List<Object> Value
    {
        get { return _value ?? new List<Object>(); }
        set { _value = value; }
    }
}
  

В моем основном коде (контроллер MVC) Я пытаюсь вручную заполнить этот класс. Имейте в виду, что когда я передаю данные из веб-формы в этот класс, используя привязку модели по умолчанию, это заполняется просто отлично.

При попытке вручную создать запись и добавить ее в список я делаю это:

         Guid id = Guid.NewGuid();

        var _searchField = new SessionFieldViewModel();
        _searchField.Name = "IDGUID";
        Object _object = (Object)id;
        _searchField.Value.Add(_object);

        _searchFields.Fields.Add(_searchField);
  

Когда я делаю это, я получаю заполненный класс со свойством Name «IDGUID», но общие списки объектов возвращаются нулевыми.

Хотя, когда я отлаживаю код и просматриваю его, кажется, что все данные там и работают так, как я это делаю, но когда я заканчиваю и проверяю _searchFields, он ничего не показывает в свойстве Value полей.

Идеи?

Заранее спасибо.

Том тлатурелле

Комментарии:

1. Где общий список становится нулевым? Привязка модели используется для привязки значений, поступающих из HTTP-запроса. Как выглядит ваше представление? Как насчет действия POST? Почему вы используете List<object> ? Зачем нужны универсальные объекты, если вы не знаете тип во время компиляции? Кажется отчасти бесполезным.

Ответ №1:

Похоже, вы никогда не устанавливаете _value , когда оно равно null из средства получения. Попробуйте

 public List<Object> Value
{
    get { return _value ?? (_value = new List<Object>()); }
    set { _value = value; }
}
  

Комментарии:

1. Хороший улов. Я этого не видел. Кроме того, поскольку этот код также работает через привязку модели по умолчанию и возвращает фактические значения в другом варианте использования, я не думал, что эта часть будет нарушена.

Ответ №2:

_value никогда не устанавливается в экземпляр List<Object> ; это всегда null. Что происходит, так это то, что вы возвращаете новый List<Object> и добавляете к нему Object , но вы немедленно отбрасываете вновь созданный List<Object> .

Вам нужно изменить ваше определение Value на что-то вроде этого:

 private List<Object> _value = new List<Object>();
public List<Object> Value
{
    get { return _value; }
    set { _value = value; }
}