Dot-Net

使用 lambda 而不是字元串屬性名稱選擇模型屬性

  • July 21, 2014

我正在建構一個類型的屬性列表,以包含在該類型集合的導出中。我想在不使用字元串作為屬性名稱的情況下執行此操作。列表中僅包含該類型的某些屬性。我想做類似的事情:

exportPropertyList<JobCard>.Add(jc => jc.CompletionDate, "Date of Completion");

我該如何去實現這個通用的 Add 方法?順便說一句,字元串是屬性的描述。

您可以通過檢查傳入的表達式來獲取 PropertyInfo 對象。例如:

public void Add<T>(Expression<Func<T,object>> expression, string displayName)
{
   var memberExpression = expression.Body as MemberExpression;
   PropertyInfo prop = memberExpression.Member as PropertyInfo;
   // Add property here to some collection, etc ? 
}

這是一個不完整的實現,因為我不知道您究竟想對屬性做什麼 - 但它確實顯示瞭如何從表達式中獲取 PropertyInfo - PropertyInfo 對象包含有關該屬性的所有元數據。此外,在將其應用於生產程式碼之前,請務必在上面添加錯誤處理(即防止表達式不是 MemberExpression 等)。

引用自:https://stackoverflow.com/questions/3558974