我有一個擴展方法來獲得一個屬性名作爲字符串:如何將lambda表達式傳遞給期望lambda表達式的方法?
public static string GetPropertyName<T, TResult>(this T obj, Expression<Func<T, TResult>> propertyId)
{
return ((MemberExpression)propertyId.Body).Member.Name;
}
現在我有另一種方法,希望在名單通過這種財產蘭巴表達的(PARAM)。 我希望這種新方法重新使用第一方法,但無法弄清楚如何將它越過
public string Test<T>(params Expression<Func<T, object>>[] ps)
{
foreach (var p in ps)
{
var howToCodeThis = p.GetPropertyName(dummy => dummy);
預期使用:
var result = Test<Something>(request.Sorting
, x => x.prop1
, x => x.prop2
, x => x.prop3
);
更新: 後背答案工作,一旦我改變我GetPropertyName迎合UnaryExpression:
public static string GetPropertyName<T, TResult>(this T obj, Expression<Func<T, TResult>> propertyId)
{
if (propertyId.Body is MemberExpression)
return ((MemberExpression)propertyId.Body).Member.Name;
if (propertyId.Body is UnaryExpression)
{
var op = ((UnaryExpression)propertyId.Body).Operand;
return ((MemberExpression)op).Member.Name;
}
throw new NotImplementedException(string.Format("GetPropertyName - {0}", propertyId.Body.GetType().FullName));
}
我問了一個非常類似的問題不是很久以前:http://stackoverflow.com/questions/30734899/passing-a-lambda-expression-as-parameter-to-a-method –
我投了你的問題。我真的很討厭ppl,只是簡單地downvote一個問題沒有理由。 – Kelmen
謝謝。如果有解釋,Downvotes是有幫助的,我同意你的看法。 –