.NET C # установка значения поля, определенного лямбда-селектором - PullRequest
2 голосов
/ 16 апреля 2010

У меня есть универсальный класс HierarchicalBusinessObject. В конструкторе класса я передаю лямбда-выражение, которое определяет селектор для поля TModel.

protected HierarchicalBusinessObject
    (Expression<Func<TModel,string>> parentSelector)

Вызов будет выглядеть так, например:

public class WorkitemBusinessObject : 
    HierarchicalBusinessObject<Workitem,WorkitemDataContext>
{
    public WorkitemBusinessObject() 
       : base(w => w.SuperWorkitem, w => w.TopLevel == true)
    { }
}

Я могу использовать селектор для чтения в классе. Например:

sourceList.Select(_parentSelector.Compile()).Where(...

Теперь я спрашиваю себя, как я мог бы использовать селектор для установки значения в поле. Что-то вроде selector.Body () .... Поле ...

1 Ответ

0 голосов
/ 16 апреля 2010

Я не совсем уверен, почему вы передаете выражение <>. Вы можете просто передать Func в качестве селектора и Action , чтобы установить значение для свойства:


protected HierarchicalBusinessObject(Action<TModel,string&gt parentSetter);

public class WorkitemBusinessObject :  
    HierarchicalBusinessObject 
{ 
public WorkitemBusinessObject()  
       : base( (WorkItem w, string s) => {w.Name = s;}) 
    { } 
}

И используйте это так:


sourceList.ForEach(w => _parentSetter(w, "NewName"));
...