您好我有3个对象都有一个日期属性,但它们的名称都不同,[ObjectA.CreateDate,ObjectB.DateCreated,ObjectC.DateOfCreation]
我想将所有项目合并到一个数组中,然后按日期排序。它们都从一个唯一的父类继承,因此我将编写一个他们都将使用的接口。
我是界面新手,最好的方法是什么?我可以专门为每个不同的对象编写inits吗?
e.g
interface orderdate
{
orderdate (objectA x){
orderdate.date = x.CreateDate
}
orderdate (objectB y){
orderdate.date = y.DateCreated
}
orderdate (objectB z){
orderdate.date = z.DateOfCreation
}
void date (){
return this.date;
}
}
然后我能够创建一个orderDate类型的数组,将所有对象添加到它并按照那个inerfaces日期属性对它们进行排序吗?
答案 0 :(得分:2)
你需要做这样的事情来建立一个共同的界面:
public interface ISortByDate
{
DateTime SortByDate { get; }
}
public class ObjectA : ISortByDate
{
public DateTime CreateDate { get; set; }
DateTime ISortByDate.SortByDate { get { return this.CreateDate; } }
}
public class ObjectB : ISortByDate
{
public DateTime DateCreated { get; set; }
DateTime ISortByDate.SortByDate { get { return this.DateCreated; } }
}
public class ObjectC : ISortByDate
{
public DateTime DateOfCreation { get; set; }
DateTime ISortByDate.SortByDate { get { return this.DateOfCreation; } }
}
然后,您将能够创建单个列表以将这三种类型中的任何一种添加到:
var list = new List<ISortByDate>();
然后你可以做你喜欢的所有排序。
答案 1 :(得分:1)
有多种排序方式。
您可以定义具有要排序的属性的接口。您希望在日期排序的所有类都应使用此接口:
public interface IOrderDate
{
DateTime CreateDate { get; }
}
实现IOrderDate的ObjA示例:
public class ObjA : IOrderDate
{
public DateTime DateOfCreation { get; set; }
public DateTime CreateDate
{
get { return DateOfCreation; }
}
public override string ToString()
{
return string.Format("DateOfCreation: {0}", DateOfCreation);
}
}
也实现IOrderDate的ObjB示例:
public class ObjB : IOrderDate
{
public DateTime CreationDate { get; set; }
public DateTime CreateDate
{
get { return CreationDate; }
}
public override string ToString()
{
return string.Format("CreationDate: {0}", CreationDate);
}
}
使用LINQ
// Create the list.
var list = new List<IOrderDate>();
list.Add(new ObjA() { DateOfCreation = DateTime.Now.AddDays(100)});
list.Add(new ObjB() { CreationDate = DateTime.Now.AddDays(-250) });
// Ascending.
list = list.OrderBy(o => o.CreateDate).ToList();
// Decending
list = list.OrderByDescending(o => o.CreateDate).ToList();
使用IComparer
以下类将对IOrderDate接口进行排序:
public class OrderDateComparer : IComparer<IOrderDate>
{
public int Compare(IOrderDate x, IOrderDate y)
{
return x.CreateDate.CompareTo(y.CreateDate);
}
}
然后,您可以填写列表并进行排序:
// Create the list.
var list = new List<IOrderDate>();
list.Add(new ObjA() { DateOfCreation = DateTime.Now.AddDays(100)});
list.Add(new ObjB() { CreationDate = DateTime.Now.AddDays(-250) });
// Ascending.
list.Sort(new OrderDateComparer());
// Decending
list.Sort(new OrderDateComparer()); // Redundant here.
list.Reverse();