MVC C #: использовать один и тот же список объектов в разных моделях (ссылка?) - PullRequest
0 голосов
/ 09 марта 2012

Я хочу использовать один и тот же список объектов в разных моделях. MainModel должна позаботиться о содержимом списка, чтобы подмодели, использующие этот список, тоже получили изменения.

Учитывая следующую модель 'Клиент' ...

public class Customer
{
    public Customer(List<Customer> customerList)
    {
        this.CustomerList= customerList;
        this.CustomerAge= new CustomerAge(this.CustomerList);
    }

    public List<Customer> CustomerList
    {
        get;
        set;
    }

    public AgeCustomer AgeCustomer
    {
        get;
        set;
    }

    public void SetCustomerList(List<Customer> customerList)
    {
        this.CustomerList= customerList;
    }
}

А Модель CustomerAge:

public class CustomerAge
{
    List<Customer> customerListComplete;

    public CustomerAge(List<Customer> customerList)
    {
        this.customerListComplete= customerList;

    }

    public List<Customer> CustomerListAgeOver40
    {
        get
        {
            return this.customerListComplete.Where(c => c.age > 40).ToList();
        }
    }

    public List<Customer> CustomerListAgeUnder40
    {
        get
        {
            return this.customerListComplete.Where(c => c.age < 40).ToList();
        }
    }

    public List<Customer> CustomerListAgeEquals40
    {
        get
        {
            return this.customerListComplete.Where(c => c.age = 40).ToList();
        }
    }
}

Пока все довольно просто, у меня есть основная модель с именем Customer и вспомогательная модель с именем CustomerAge. Когда я изменил CustomerList в Customer, вызвав Customer.SetCustomerList(newCustomerList), я подумал, что CustomerListComplete в CustomerAge также изменится, но это не так. Зачем? Как я могу использовать один и тот же список в обеих моделях?

1 Ответ

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

Это потому, что на вашу коллекцию ссылаются, ну, в общем, ссылки.

CustomerList в Customer и customerListComplete в CustomerAge являются просто «указателями» на коллекцию.При изменении CustomerList, customerListComplete не меняется.

Вам необходимо добавить public void SetCustomerList(List<Customer> customerList) к CustomerAge и вызвать его с Customer.SetCustomerList.

Другое решение состоит в том, чтобыизмените конструктор CustomerAge, чтобы получить экземпляр Customer, а затем используйте Customer.CustomerList:

public Customer(List<Customer> customerList)
{
    this.CustomerList= customerList;
    this.CustomerAge= new CustomerAge(this);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...