c# - Как записать данные в переменную объекта заданную через lambda


2

У меня есть некоторый класс MyClass1 и объект этого класса myClass1. Заданна некоторая Lambda x=>x.SomeField

Класс и лямбда заранее не известны, они передаются параметрами.

Set(myClass1,x=>x.SomeField) // эту функцию нужно реализовать

Мне нужно в myClass1.SomeField положить некоторое значение. Как это можно сделать?

Как я понимаю это можно сделать на основе Expressions но что-то пока не понял как.

Источник
  •  242
  •  0
  • 28 янв 2018 2018-01-28 10:54:12
В довольно простом случае можно так: public static void Set<T, U>(T obj, Expression<Func<T, U>> getter) { MemberExpression me = (MemberExpression)getter.Body; var t = Expression.Lambda<Action<T>>(Expression.Assign(me, Expression.Constant(default(U), typeof(U))), getter.Parameters); t.Compile().Invoke(obj); } единственное что - компиляция выражения каждый раз — 28 янв 20182018-01-28 11:25:52.000000
Объявить по месту использования myClass1 как dynamic, или уходить в рефлексию. — 28 янв 20182018-01-28 11:23:58.000000
@Grundy объект, класс тоже не известен заранее. Я уже понял как - stackoverflow.com/questions/9601707/… 28 янв 20182018-01-28 11:16:49.000000
а какое значение? — 28 янв 20182018-01-28 11:11:48.000000

Ответов пока нет