2014-10-18 34 views
0

在這個例子中是否有可能獲得Typeemployee從表達式中獲取容器類型

@Html.MediaFor(x => employee.ProfileImage)

MediaFor簽名是

MediaFor<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> expression)

+0

您是否有理由在這裏首先使用表達式? – 2014-10-18 18:05:06

+0

不是真的,我想我可以刪除'Expression',只是用'Func'去用,但這真的會改變什麼嗎? – Marcus 2014-10-18 18:08:50

+0

我得到的是'MediaFor'完全是什麼。爲什麼需要知道類型? – 2014-10-18 18:17:06

回答

0

是的,有一個Expression<>的好處之一是,你可以檢查它的部分。您的訪問者是MemberExpression,它的Expression屬性將是該成員訪問的Expression。因此,檢索了Type

例子:

public static Type GetRootType<T1,T2>(Expression<Func<T1,T2>> expr) 
{ 
    MemberExpression mex = expr.Body as MemberExpression; 
    return mex.Expression.Type;  
} 

當然,這可以擴展到支持不同類型的表達式,示例將只簡單MemberExpression工作。爲簡潔起見,省略錯誤檢查。