뭔가 작동합니다 :
public class Parent
{
public Parent Set<TValue>(Expression<Func<Parent, TValue>> func, TValue value)
{
MemberExpression mex = func.Body as MemberExpression;
if(mex == null) throw new ArgumentException();
var pi = mex.Member as PropertyInfo;
if(pi == null) throw new ArgumentException();
object target = GetTarget(mex.Expression);
pi.SetValue(target, value, null);
return this;
}
private object GetTarget(Expression expr)
{
switch (expr.NodeType)
{
case ExpressionType.Parameter:
return this;
case ExpressionType.MemberAccess:
MemberExpression mex = (MemberExpression)expr;
PropertyInfo pi = mex.Member as PropertyInfo;
if(pi == null) throw new ArgumentException();
object target = GetTarget(mex.Expression);
return pi.GetValue(target, null);
default:
throw new InvalidOperationException();
}
}
}
출처
2012-06-07 21:02:19
Lee
왜 구체적으로 표현
및 소비자의
, 내가 할 수있을까요? ''t.Set ("Number", 6)''t.Set ("Nested.Id", 25)'충분합니까? 그것은 아마 더 쉬울 것이고, 나는 그것을 할 몇 가지 흥미로운 방법을 생각해 낼 수 있습니다. –OK입니다. 회원 이름을 찾을 수 있습니다 (. (점) 사이). 당신의 솔루션을 제발 제안 해 주시겠습니까? 전에 –
... 직접 C#을 사용할 수없는 이유는 무엇입니까? 즉't.Number = 6; t.Name = "무언가"; t.Nested.Id = 25; ' –