我想基于其中一个字段 - 时间戳对一个事件列表的字段进行排序。但是我收到的错误是该字段未在其实现的接口中定义。
// Outer class
public void SortEvents()
{
_events = _events.OrderByDescending((shipmentEvent) => shipmentEvent._timestamp).ToList();
}
private class Event : IShipmentEvent
{
public readonly DateTime _timestamp;
public readonly string _location;
public readonly string _description;
public Event(DateTime timestamp, string location, string description)
{
_timestamp = timestamp;
_location = location;
_description = description;
}
}
' IShipmentEvent'不包含' _timestamp'的定义和不 扩展方法' _timestamp'接受第一个类型的参数 ' IShipmentEvent'可以找到(你错过了使用指令或 汇编参考?)
我尝试在lambda表达式的参数列表中输入(Event shipmentEvent)
,但后来我收到了错误:
'列表'不包含的定义 ' OrderByDescending'和最好的扩展方法重载 ' Queryable.OrderByDescending(IQueryable,Expression>)'需要一个类型为“IQueryable'
的接收器
接口只是一个虚拟接口,允许我公开实现类之外的私有类对象列表:
public interface IShipmentEvent {}
...
private List<IShipmentEvent> _events;
public List<IShipmentEvent> Events { get { return _events; } }
答案 0 :(得分:1)
班级Event
包含_timestamp
接口IShipmentEvent
。将_timestamp
添加到界面。
答案 1 :(得分:0)
_events
是IShipmentEvent
个对象的列表。因此,无法保证列表中的每个对象都是Event
,其中包含_timestamp
字段。尽可能存在另一种实现IShipmentEvent
但没有该字段的类型,并且该类型的对象也出现在列表中。
如果您想确保可以访问_timestamp
,请将列表类型更改为List<Event>
,以便只能Event
个对象,或添加_timestamp
字段到界面,使所有IShipmentEvent
个对象都有它。
答案 2 :(得分:-1)
我设法通过将参数转换为Event类型来解决它。如此简单我很惊讶我没有早点想到它:
((事件) shipmentEvent)._ timestamp
_events = _events.OrderByDescending((shipmentEvent) => ((Event)shipmentEvent)._timestamp).ToList();