无法对列表进行排序

时间:2015-09-06 20:33:44

标签: c# sorting interface

我想基于其中一个字段 - 时间戳对一个事件列表的字段进行排序。但是我收到的错误是该字段未在其实现的接口中定义。

// 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; } }

3 个答案:

答案 0 :(得分:1)

班级Event包含_timestamp 接口IShipmentEvent。将_timestamp添加到界面。

答案 1 :(得分:0)

_eventsIShipmentEvent个对象的列表。因此,无法保证列表中的每个对象都是Event,其中包含_timestamp字段。尽可能存在另一种实现IShipmentEvent但没有该字段的类型,并且该类型的对象也出现在列表中。

如果您想确保可以访问_timestamp,请将列表类型更改为List<Event>,以便只能Event个对象,或添加_timestamp字段到界面,使所有IShipmentEvent个对象都有它。

答案 2 :(得分:-1)

我设法通过将参数转换为Event类型来解决它。如此简单我很惊讶我没有早点想到它:

  

(事件) shipmentEvent)._ timestamp

_events = _events.OrderByDescending((shipmentEvent) => ((Event)shipmentEvent)._timestamp).ToList();