C# 创建一个接口对3个不同对象数组进行排序

C# 创建一个接口对3个不同对象数组进行排序,c#,sorting,interface,C#,Sorting,Interface,嗨,我有3个对象,它们都有一个日期属性,但是它们的名称都不同,[ObjectA.CreateDate,ObjectB.DateCreated,ObjectC.DateOfCreation] 我想将所有项目合并到一个数组中,然后按日期排序。它们都继承自一个唯一的父类,因此我将编写一个它们都将使用的接口 我不熟悉接口,最好的方法是什么?我可以专门为每个不同的对象编写init吗 e、 g 然后,我是否能够创建orderDate类型的数组,将所有对象添加到该数组中,并按照该日期属性对它们进行排序?您需要

嗨,我有3个对象,它们都有一个日期属性,但是它们的名称都不同,[ObjectA.CreateDate,ObjectB.DateCreated,ObjectC.DateOfCreation]

我想将所有项目合并到一个数组中,然后按日期排序。它们都继承自一个唯一的父类,因此我将编写一个它们都将使用的接口

我不熟悉接口,最好的方法是什么?我可以专门为每个不同的对象编写init吗

e、 g


然后,我是否能够创建orderDate类型的数组,将所有对象添加到该数组中,并按照该日期属性对它们进行排序?

您需要执行此类操作才能创建一个公共接口:

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; } }
}
public interface IOrderDate
{
    DateTime CreateDate { get; }
}
public class OrderDateComparer : IComparer<IOrderDate>
{
    public int Compare(IOrderDate x, IOrderDate y)
    {
        return x.CreateDate.CompareTo(y.CreateDate);
    }
}
然后,您可以创建一个列表,将这三种类型中的任何一种添加到:

var list = new List<ISortByDate>();
var list=newlist();

然后,您可以进行所有您喜欢的排序。

有多种排序方法

您可以使用要排序的属性定义接口。要在日期排序的所有类都应使用此接口:

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; } }
}
public interface IOrderDate
{
    DateTime CreateDate { get; }
}
public class OrderDateComparer : IComparer<IOrderDate>
{
    public int Compare(IOrderDate x, IOrderDate y)
    {
        return x.CreateDate.CompareTo(y.CreateDate);
    }
}
实现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);
    }
}
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);
    }
}
还实现IOrderDate的ObjB示例:

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);
    }
}
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();
//创建列表。
var list=新列表();
Add(new ObjA(){DateOfCreation=DateTime.Now.AddDays(100)});
添加(newobjb(){CreationDate=DateTime.Now.AddDays(-250)});
//上升。
list=list.OrderBy(o=>o.CreateDate.ToList();
//下降
list=list.OrderByDescending(o=>o.CreateDate.ToList();
使用IComparer

以下类将对IOrderDate接口进行排序:

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; } }
}
public interface IOrderDate
{
    DateTime CreateDate { get; }
}
public class OrderDateComparer : IComparer<IOrderDate>
{
    public int Compare(IOrderDate x, IOrderDate y)
    {
        return x.CreateDate.CompareTo(y.CreateDate);
    }
}
公共类OrderDateComparer:IComparer
{
公共整数比较(IOrderDate x,IOrderDate y)
{
返回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();
//创建列表。
var list=新列表();
Add(new ObjA(){DateOfCreation=DateTime.Now.AddDays(100)});
添加(newobjb(){CreationDate=DateTime.Now.AddDays(-250)});
//上升。
Sort(neworderDateComparer());
//下降
list.Sort(新OrderDateComparer());//这里多余。
list.Reverse();

您提供的代码与如何定义接口不太接近。接口没有状态,因此无法对其进行初始化。另一个类需要实现您的接口,然后根据需要对其进行初始化。您确定这是C#?谢谢!这正是我想要的