从List <T>中查找最大值

Ret*_*hic 5 c# list generic-list c#-4.0

我定义了许多对象,每个对象都有一个名为"CreateDate"的属性.

是否可以编写单个通用方法从我指定的对象中选择最高日期?

我试图使用通用方法,但当我尝试指定属性名称时,编译器不喜欢它.

我试图在这些方面取得成就......

private static DateTime GetLastDate<T>(List<T> data)
{
    // Unfortunately, this is not allowed...
    return
        (from d in data
        orderby d.CreateDate
        select d.CreateDate).FirstOrDefault();
}
Run Code Online (Sandbox Code Playgroud)

Ser*_*rvy 11

最好的方法是创建具有特定功能的接口,并让所有类实现该接口:

public interface ICreated
{
  public DateTime CreateDate {get;}
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以确保接受的所有项都实现该接口:

private static DateTime GetLastDate<T>(IEnumerable<T> input) where T : ICreated
{
    return input.Max(d=>d.CreateDate);
}
Run Code Online (Sandbox Code Playgroud)

如果那真的不是一个选项(可能是因为你不能修改类让它实现接口或集合来包装底层类型)你可以使用dynamic.我会高度劝阻你这样做,因为它真的不是很好的设计,它会慢得多,并且它很容易破坏,但它可以工作:

private static DateTime GetLastDate(IEnumerable<dynamic> input)
{
    return input.Max(d=>d.CreateDate);
}
Run Code Online (Sandbox Code Playgroud)