我已經重構了使用lambda表達式來訪問正確的價值觀可以在不使用MVC的情況下訪問DisplayName屬性?
public static string ToCsv<TModel>(this List<TModel> list, string delimiter, string lineBreak, string valueWrap, params Expression<Func<TModel, object>>[] expressions)
{
var sb = new StringBuilder();
var headers = expressions.Select(m => String.Format("{0}{1}{0}", valueWrap, GetPropertyName(m))).ToArray();
sb.Append(String.Format("{0}{1}", String.Join(delimiter, headers), lineBreak));
foreach (var listItem in list)
{
var values = expressions.Select(m => String.Format("{0}{1}{0}", valueWrap, m.Compile()(listItem))).ToArray();
sb.Append(String.Format("{0}{1}", String.Join(delimiter, values), lineBreak));
}
return sb.ToString();
}
這非常適用於列表中的一個通用的CSV建設者,但因爲我想這在多臺服務器轉移到一些常用代碼爲幾個項目訪問。我不能參考System.Web.Mvc
程序集
有沒有很好的方法來訪問DisplayName
屬性,如果不存在,訪問變量名?
我目前的嘗試訪問((MemberExpression) expression.Body).Member.Name
然而,如果它必須將值轉換爲字符串,它將無法正常工作。 (即傳遞一個int和隱式轉換)
遍歷屬性爲內部類沒有工作的第二個嘗試(即model
=>model.innerClass.property
)
更多信息:在沒有解決方案後,我繼續使用'System.Web.Mvc.ExpressionHelper',但是我遇到了另一個問題。沒有HtmlHelper及其ViewData,它將不會獲取屬性的DisplayName屬性。有任何想法嗎? –