В моем проекте у меня есть этот класс:
public class AccountData
{
private const string DATE_FORMAT = "dd/MM/yyyy HH:mm";
private string userName;
private long creationDate, lastModificationDate;
public ProjectData()
{
this.userName = Environment.UserName;
creationDate = lastModificationDate = DateTime.Now.Ticks;
}
public void UpdateLastModified()
{
lastModificationDate = DateTime.Now.Ticks;
}
#region Properties
public string CreationDate => new DateTime(creationDate).ToString(DATE_FORMAT);
public string LastModificationDate => new DateTime(lastModificationDate).ToString(DATE_FORMAT);
public string UserName => userName;
#endregion
}
И мне нужно отобразить список этого класса (System.Generic.List<AccountData>()
).
Я могу отобразить его правильно, но я также хочу добавить возможность сортировки данных по одному из параметров. т.е. если пользователь выбрал сортировку по дате создания, все элементы в списке будут отсортированы по этому значению.
Но я не могу найти гибкое решение.
Это то, что У меня так далеко:
private void SortItemsBy(string by)
{
List<AccountData> accounts = GetAccounts();
switch (by)
{
case "Last Modified":
Sort(accounts, data => data.LastModificationDate);
break;
case "Creation Date":
Sort(accounts, data => data.CreationDate);
break;
case "User Name":
Sort(accounts, data => data.UserName);
break;
}
}
private void Sort(IEnumerable<AccountData> accounts, Func<AccountData, string> predicate)
{
var orderedAccounts = accounts.OrderBy(predicate);
DisplayAccounts(orderedAccounts);
}
Как видите, я основываю сортировку на строковом значении, которое (насколько мне известно) подвержено ошибкам.
Есть ли лучший способ сделать это¿