Reflection获取对象属性以对列表进行排序

chr*_*r85 7 c# sorting reflection

我想通过存储在其中的对象的属性对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));
    }
 }
Run Code Online (Sandbox Code Playgroud)

它工作正常,但我想更通用,以便不必知道要排序的字段.我想过这样的事情:

//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));
}
Run Code Online (Sandbox Code Playgroud)

显然这不起作用,但这就是我想要的.有可能吗?

谢谢.

H-B*_*ami 3

反射代码不正确,看这个

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));
}
Run Code Online (Sandbox Code Playgroud)

我认为这对你有用。