簡體   English   中英

如何使用lambda表達式來獲取屬性“path”和值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM