很简短,我不确定是否可能,加上我找不到一个例子。
void Order<T>(List<T> lista)
{
// get all properties, T is always a class
List<PropertyInfo> props = typeof(T).GetProperties().ToList();
// just order by one property, let's say: props[0]
List<T> oList = lista.OrderBy( /* props[0] */ );
}
只想要新的有序列表。
答案 0 :(得分:2)
使用this Blog中的代码会产生以下Extension Method:
public static IEnumerable<T> OrderBy<T>(this IEnumerable<T> entities, string propertyName)
{
if (!entities.Any() || string.IsNullOrEmpty(propertyName))
return entities;
var propertyInfo = entities.First().GetType().GetProperty(propertyName, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance);
return entities.OrderBy(e => propertyInfo.GetValue(e, null));
}
现在您可以执行以下操作:
lista.OrderBy(props[0].Name).ToList();
答案 1 :(得分:1)
我认为这应该有效(如果属性数组不为空)
List<T> oList = lista.OrderBy(item => props[0].GetValue(item)).ToList();
在Mono上,GetValue没有超载,只需要一个参数。
List<T> oList = lista.OrderBy(item => props[0].GetValue(item, null)).ToList();