如何检查KeySelector
中的属性?
我有按所选列名称对集合进行排序的功能:
private void DoListSort<T,TKey>(SortableObservableCollection<T> listBoxItems, Func<T, TKey> keySelector)
{
listBoxItems.Sort(keySelector,ListSortDirection.Ascending);
}
我想要:
private void DoListSort<T,TKey>(SortableObservableCollection<T> listBoxItems, Func<T, TKey> keySelector)
{
if ( keySelector.PropertyIAmAskingFor == ActualOrderByColumnName )
listBoxItems.Sort(keySelector, ListSortDirection.Descending);
else
listBoxItems.Sort(keySelector,ListSortDirection.Ascending);
}
最佳答案
您可以将 Func
视为编译方法。即使此 Func
是通过 lambda 表达式创建的,您也无法访问此类表达式。
相反,您可以传递一个表达式
(就像代码即数据)并解析它以获取属性名称,如下所示:
private void DoListSort<T,TKey>(
SortableObservableCollection<T> listBoxItems,
Expression<Func<T, TKey>> keySelectorExpression)
{
MemberExpression member_expression =
(MemberExpression)keySelector.Body;
//This is the name of the property
var property_name = member_expression.Member.Name;
Func<T, TKey> keySelector = keySelectorExpression.Compile();
//Continue here
//...
}
请注意,如果传递的表达式不是简单的成员访问表达式,此方法将引发异常。
关于c# - 如何检查KeySelector中的属性名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35178581/