我想在 C# 中根据存储在其中的对象的属性对列表进行排序。我有这个:
if (sortColumn == "Login")
{
if (sortDir == "ASC")
{
filteredList.Sort((x, y) => string.Compare(x.Login, y.Login, true));
}
else
{
filteredList.Sort((x, y) => string.Compare(y.Login, x.Login, true));
}
}
它工作正常,但我想做的更通用,以便不必知道要排序的字段。我有这样的想法:
//With sortColumn = "Login";
if (sortDir == "ASC")
{
filteredList.Sort((x, y) => string.Compare(x.GetType().GetProperty(sortColumn), y.GetType().GetProperty(sortColumn), true));
}
else
{
filteredList.Sort((x, y) => string.Compare(y.GetType().GetProperty(sortColumn), x.GetType().GetProperty(sortColumn), true));
}
显然这行不通,但这就是我想要的。有可能吗?
谢谢。
最佳答案
反射代码不对,看这个
PropertyInfo pi1 = typeof(x).GetProperty(sortColumn);
PropertyInfo pi2 = typeof(y).GetProperty(sortColumn);
//With sortColumn = "Login";
if (sortDir == "ASC")
{
filteredList.Sort((x, y) => string.Compare(pi1.GetValue(x, null), pi2.GetValue(y, null), true));
}
else
{
filteredList.Sort((x, y) => string.Compare(pi2.GetValue(y, null), pi1.GetValue(x, null), true));
}
我认为这对你有用。
关于c# - 反射获取对象属性以对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12210424/