2015-06-21 1 views
0

Как изменить состояние списка, который является частью модели представления в метод расширения, поэтому вид модели отражает это изменение без необходимости повторно присвоить значениеИзменение состояния Список <T> внутри метода расширения

Код:

//ViewModel: 

//This line should modify the change internally wihtout having to reassign like 

// ..Selected =model.CheckBoxList.Selected.RemoveWhere(c => c.SelectedValue == null) 

    model.CheckBoxList.Selected.RemoveWhere(c => c.SelectedValue == null) 

метод расширения:

public static IEnumerable<T> RemoveWhere<T>(this IEnumerable<T> source, Predicate<T> predicate) 

{ 

      var x = source.ToList(); 
      x.RemoveAt(1); 
      source = x; 
      return source; 

} 

Update:

public class CheckBoxList 
    { 
     public CheckBoxList() 
     { 
      //Selected = new List<CheckBoxListViewModel>(); 
     } 

     [XmlElement("SelectedItem")] 
     public List<CheckBoxListViewModel> Selected { get; set; } 
    } 

    [XmlRoot(ElementName = "MyClass")] 
    public class CheckBoxListViewModel 
    { 
     public string SelectedValue { get; set; } 
     public string SelectedDescription { get; set; } 
    } 
+4

Вы не можете этого сделать. Если вы хотите изменить исходный код, примите изменяемый тип. – SLaks

+0

@Slaks: И как мне это сделать? Выбранный тип свойства - List . Код обновлен. – Avais

ответ

2

Назначение параметра не влияет на выражение, которое вы передаете методу.

Вы хотите изменить существующий экземпляр. Для этого вам необходимо принять изменяемый тип; а именно: List<T>.

List<T> уже имеет функцию RemoveAll(), которая выполняет именно это, поэтому вам не нужно ничего делать вообще.

+0

Спасибо. Получил больше разъяснений по этой теме. Методы типа «Где» и т. Д. Являются расширениями, а метод RemoveAll - в списке . Cheers mate :) – Avais

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

  • Нет связанных вопросов^_^