按属性名(字符串值)排序列表?我有一个对象列表。我如何使用属性名称来排序这个列表?stringorderbyField="代码";列表l=FillList();l=l.OrderBy(o=>orderbyField);我可以扩展这个问题吗?如果您不必以字符串形式提供属性名称,使用动态非常简单:Listl=FillList();l=l.OrderBy(o=>((dynamic)o).Id);如果属性名称必须是一个字符串,那么它会变得有点复杂,但可以使用反射来完成(虽然效率不高):l=l.OrderBy(o=>o.GetType().GetProperty("代码").GetValue(o,null));您还应该考虑添加一些错误处理,例如,如果属性不存在。此外,如果列表中的所有元素都具有相同的运行时类型,则使用表达式树重新编译getter函数并重用它(而不是直接使用反射)会更高效。publicstaticFuncCreateGetter(TyperuntimeType,stringpropertyName){varpropertyInfo=runtimeType。获取属性(属性名称);//创建一个参数(objectobj)varobj=Expression.参数(类型(对象),“对象”);//将obj转换为runtimeTypevarobjT=Expression.TypeAs(obj,runtimeType);//属性访问器varproperty=Expression.Property(objT,propertyInfo);varconvert=Expression.TypeAs(property,typeof(object));返回(Func)Expression.Lambda(convert,obj).Compile();}并像这样使用:以上是C#学习教程:Sortlistbypropertyname(stringvalue)?如果分享的内容对你有用,需要了解更多C#学习教程,希望大家多多关注——varcodeGetter=CreateGetter(l[0].GetType(),"Code");//以第一个元素为例l=l.OrderBy(o=>codeGetter(o));本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
