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)