[英]Can I use result of executing lambda expression in assigning property?
[英]How can I use a lambda expression to get both the property “path” and the value?
我想做一些類似於HtmlHelpers在ASP.NET MVC中所做的事情。 請考慮以下事項:
@Html.EditorFor(model => model.SomeProperty.SomeInnerProperty)
HtmlHelper不僅可以清楚地獲取SomeInnerProperty的值,而且還知道我稱之為該屬性的“路徑”,因為它創建了具有屬性的相應HTML元素:
name="SomeProperty.SomeInnerProperty"
我想能夠創建一個方法,可以獲得類似於HtmlHelper的值和“路徑”。 我對現有的HtmlHelpers進行了一些反思,看起來像是一個兔子洞。 我已經能夠創建一個消耗它的方法,如下所示:
MyCustomMethod(model => model.SomeProperty.SomeInnerProperty);
private void MyCustomMethod(Expression<Func<object, object>> expression)
{
// I can inspect the expression object in the debugger here
}
在檢查“表達”對象時,我可以通過反思來解決問題,但我不確定我的解決方案會有多強大,因為我只是通過觀察來解決問題。 此外,它似乎比它應該更難; 就像我錯過了一些簡單的事情。
有任何想法嗎?
要獲得完整的路徑:
expression.Body.ToString()
將為您提供'model.SomeProperty.SomeInnerProperty'。 獲取第一個點后的子字符串以獲取'SomeProperty.SomeInnerProperty'。
要獲得價值:
expression.Compile().Invoke(modelObject);
//basic MemberExpression memberExpression = (MemberExpression) expression.Body; string name = (memberExpression.Expression as MemberExpression).Member.Name; name += "." + memberExpression.Member.Name; //cycle MemberExpression memberExpression = (MemberExpression) expression.Body; string name = ""; while (memberExpression.Expression is MemberExpression) { name = memberExpression.Member.Name + "." + name; memberExpression = (MemberExpression)memberExpression.Expression; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.