如何检查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);
}
答案 0 :(得分:0)
keySelector
是一个返回T
类型的函数,并且作为参数类型TKey
获取,因此它没有任何属性。
答案 1 :(得分:0)
您可以将Func
视为已编译的方法。即使这个Func
是通过lambda表达式创建的,也无法访问这样的表达式。
相反,您可以传递Expression
(类似于代码作为数据)并解析它以获取如下属性名称:
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
//...
}
请注意,如果传递的表达式不是简单的成员访问表达式,则此方法将引发异常。