C# 通过lambda表达式传递属性,并对其属性进行排序
我有一个ISomeType列表,其中T至少包含一个IConvertibleProperty类型的属性。例如:C# 通过lambda表达式传递属性,并对其属性进行排序,c#,generics,C#,Generics,我有一个ISomeType列表,其中T至少包含一个IConvertibleProperty类型的属性。例如: IConvertibleProperty { string PropertyA { get; set; } string PropertyB { get; set; } // etc } public class SomeTypeA : ISomeType { public ConvertibleProperty PropertyX { get; set
IConvertibleProperty
{
string PropertyA { get; set; }
string PropertyB { get; set; }
// etc
}
public class SomeTypeA : ISomeType
{
public ConvertibleProperty PropertyX { get; set; }
// etc
}
我需要创建一个通用函数,可以通过以下方式调用该函数:
CustomMethod(list, x => x.PropertyX);
并将能够在其中实现下一个排序:
protected void CustomMethod<T, TKey>(IList<T> list, Func<T, TKey> expr) where T : ISomeType where TKey : IConvertibleProperty
{
// example of non-generic sorting (in this case expr = x.PropertyX)
var sortedList = list.OrderBy(x => x.PropertyX.PropertyA).ThenBy(x => x.PropertyX.PropertyB).ToList();
// rest of the code
}
受保护的void CustomMethod(IList列表,Func expr),其中T:ISomeType,其中TKey:IConvertibleProperty
{
//非通用排序示例(在本例中,expr=x.PropertyX)
var sortedList=list.OrderBy(x=>x.PropertyX.PropertyA).ThenBy(x=>x.PropertyX.PropertyB.ToList();
//代码的其余部分
}
这可能吗?我想您正在寻找:
var sortedList = list.OrderBy(x => expr(x).PropertyA)
.ThenBy(x => expr(x).PropertyB)
.ToList();
我想你在找这个:
var sortedList = list.OrderBy(x => expr(x).PropertyA)
.ThenBy(x => expr(x).PropertyB)
.ToList();
这很有效。把答案交给布罗格比尔德,因为这个答案首先在这里
protected List<T> CustomMethod<T, TKey>(IList<T> list, Func<T, TKey> expr)
where T : ISomeType where TKey : IConvertibleProperty
{
var sortedList = list
.OrderBy(x => expr(x).PropertyA)
.ThenBy(x => expr(x).PropertyB).ToList<T>();
return sortedList;
}
这很有效。把答案交给布罗格比尔德,因为这个答案首先在这里
protected List<T> CustomMethod<T, TKey>(IList<T> list, Func<T, TKey> expr)
where T : ISomeType where TKey : IConvertibleProperty
{
var sortedList = list
.OrderBy(x => expr(x).PropertyA)
.ThenBy(x => expr(x).PropertyB).ToList<T>();
return sortedList;
}