2016-02-04 2 views
-1

У меня есть класс:Как работать со свойствами в C#?

public class ViewModel 
{ 
    public string Name { set; get; } 

    public List<SimpleViewModel> Parameters 
    { 
     set 
     { 
      NotDeletedParameters = value.Where(t => !t.Deleted).ToList(); 
      parameters = value; 
     } 
     get 
     { 
      return parameters; 
     } 
    } 

    private List<SimpleViewModel> parameters; 

    public ViewModel() 
    { 
     Parameters = new List<SimpleViewModel>(); 
    } 

    public List<SimpleViewModel> NotDeletedParameters{ set; get; } 
} 

Есть 2 списка параметров в этом классе: Parameters и NotDeletedParameters.

Как установить NotDeletedParameters = value.Where(t => !t.Deleted).ToList();, когда я установил свойство Parameters.

Когда я использую этот код, NotDeletedParameters все еще имеет 0 элементов в списке. Есть идеи?

+5

Это выглядит нормально, если только я что-то не пропускаю. Вы уверены, что 'value.Where (t =>! t.Deleted) .ToList() 'имеет элементы в нем? – adv12

+0

Да, я уверен, что' значение' не пусто. –

+0

Вы пытались отладить свой код? Что вы пытаетесь присвоить параметрам? –

ответ

2

Список NotDeletedParameters будет пустым, поскольку вы устанавливаете новое свойство List to Parameters, которое, возможно, не удаляло параметры. Когда вы редактируете элементы списка параметров для установки удаленных параметров, список NotDeletedParameters не будет обновляться, поскольку он имеет свою собственную копию, которая была назначена во время инициализации параметров.

Итак, вместо этого верните отфильтрованный список параметров в NotDeletedParameter.

public class ViewModel 
{ 
    public string Name { set; get; } 

    public List<SimpleViewModel> Parameters 
    { 
     set 
     { 
      parameters = value; 
     } 
     get 
     { 
      return parameters; 
     } 
    } 

    private List<SimpleViewModel> parameters; 

    public ViewModel() 
    { 
     Parameters = new List<SimpleViewModel>(); 
    } 

    public List<SimpleViewModel> NotDeletedParameters{ 
     get { 
       return parameters .Where(t => !t.Deleted).ToList(); 
      } 
    } 
} 
1

Вы можете, вероятно, избежать этой проблемы, сделав NotDeletedParameters свойство ПОЛУЧИТЬ только что создает свой список на лету:

public List<SimpleViewModel> NotDeletedParameters 
{ 
    get 
    { 
     return Parameters.Where(t => !t.Deleted).ToList(); 
    } 
} 

(я также рекомендовал бы возвращая IEnumerable вместо списка , и изменение оператора return в Parameters.Where (t =>! t.Deleted) .ToList(). AsReadOnly()

Смежные вопросы