I’m new to lambda. So excuse me if my question is simple.
I have a method that uses reflection to set a property on some types:
public void WriteId(object obj, int id) {
var type = obj.GetType();
var prop = type.GetProperties(BindingFlags.Public | BindingFlags.Instance)
.Where(p => p.CanRead && p.CanWrite)
.Where(p => p.Name == "Id")
.Where(p.PropertyType == typeof(int))
.FirstOrDefault();
if(prop != null)
prop.SetValue(obj, id, null);
}
Can you show me please how can I create a lambda that do same job? Actually I want to create a lambda for each type, compile it, and cache it. Thanks in advance.
I would install FastMember from NuGet, and then use:
which does pretty much what you say, except it happens to use
ILGeneratorviaTypeBuilder(rather thanExpression) – but all the caching etc is there.A second cheaky approach is to get
dynamicto do it all for you:But if you want to use
Expressionfor other reasons: