Мое назначение - иметь функциональность, позволяющую пользователю приложения сортировать RegisteredUser
объекты по значениям их полей / свойств.
Assistant
класс наследует RegisteredUser
. Я хотел бы как-нибудь иметь возможность использовать lambdas
и LINQ
и сортировать List<Assistants>
. Есть ли способ добиться этого?
public abstract class RegisteredUser
{
protected int id;
protected bool active;
protected string name;
//other fields and methods
public static IComparer sortUsersByName(Order order)
{
return (IComparer)new nameFieldComparator(order);
}
private class nameFieldComparator : IComparer
{
private Order direction;
public nameFieldComparator(Order direction)
{
this.direction = direction;
}
public int Compare(object x, object y)
{
if (x != null && y != null)
{
RegisteredUser user1 = (RegisteredUser)x;
RegisteredUser user2 = (RegisteredUser)y;
return (int)this.direction * String.Compare(user1.Name, user2.Name);
}
else throw new ArgumentNullException("Objects cannot be compared!");
}
}
}
Моя точка отсчета была Как использовать IComparer . Я пробовал разные вещи, не работал.
Assistant a = new Assistant();
a.SetId(5);
a.Active = true;
a.Name = "asdasd";
Assistant f = new Assistant();
f.SetId(6);
f.Active = true;
f.Name = "asdf";
Assistant c = new Assistant();
c.Name = "a";
c.SetId(2);
List<RegisteredUser> l = new List<RegisteredUser>();
l.Add(a);
l.Add(f);
l.Add(c);
//list.Sort((x, y) => RegisteredUser.sortUsersByName()); of course, doesn't work...
List<Assistant> l = l.OrderBy() //tried bunch of ideas, but cannot get the syntax right
PS Я новичок в программировании и c #