2011-01-05 3 views
1

Я хочу создать простую функцию, которая выполняет следующее:Динамический набор свойств с выражениями linq?

Sub SetValue(Of TInstance As Class, TProperty)(
    ByVal instance As TInstance, 
    ByVal [property] As Expression(Of Func(Of TInstance, TProperty)), 
    ByVal value As TProperty) 

    '... 
End Sub 

Использование:

Dim x As New Person 
SetValue(x, Function(p) p.FirstName, "John Doe") 

ответ

1

Это на самом деле довольно просто:

Sub SetValue(Of TInstance As Class, TProperty)(
    ByVal instance As TInstance, 
    ByVal [property] As Expression(Of Func(Of TInstance, TProperty)), 
    ByVal value As TProperty) 


    'TODO: validate nulls 
    If [property].Body.NodeType <> ExpressionType.MemberAccess Then _ 
    Throw New ArgumentException("Invalid lambda expression.", "property") 


    Dim body = DirectCast([property].Body, MemberExpression) 
    Dim member = DirectCast(body.Member, PropertyInfo) 
    member.SetValue(instance, value, Nothing) 
End Sub 

HTH

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