返回特定日期的事件枚举

时间:2015-06-04 15:14:50

标签: c#

我正在尝试编写一个函数,该函数返回包含以下代码的“约会”项的枚举 -

public interface IAppointment
{
    DateTime Start { get; }
    int Length { get; }
    string DisplayableDescription { get; }
    bool OccursOnDate(DateTime date);
}

该函数应该从列表中检索“约会”项。我已经在类顶部实例化了列表,该列表由IList接口实现的所有方法全局访问。

到目前为止,这是我的功能

public IEnumerable<IAppointment> GetAppointmentsOnDate(DateTime date)
{
    foreach (IAppointment item in _list)
    {
        if(item.Start.Date == date.Date)
        {
            return item; //  error appears here under 'item'
        }
    }
}

错误:

  

无法将'....IAppointment'类型隐式转换为'System.Collections.Generic.IEnumerable<...IAppointment>'。存在显式转换(您是否错过了演员?)

这是我对此功能的分配规范:GetAppointmentsOnDate - 检索指定日期上发生的所有约会的枚举

3 个答案:

答案 0 :(得分:4)

使用yield关键字:

public IEnumerable<IAppointment> GetAppointmentsOnDate(DateTime date)
    {

        foreach (IAppointment item in _list)
        {
            if(item.Start == date)
            {
                yield return item;  
            }
        }

    }

或者只是使用在哪里达到你的条件(不要忘记包括import System.Linq;):

_list.Where(item=>item.Start == date);

答案 1 :(得分:2)

  

该函数应该从a中检索“约会”项   列表。

您正在尝试返回IEnumerable<IAppointment>这将是约会的集合,但是从代码和说明中看起来您想要返回单个项目,将您的返回类型更改为IAppointment在你的方法。

您也可以使用FirstOrDefault之类的:

public IAppointment GetAppointmentsOnDate(DateTime date)
{
   return _list.FirstOrDefault(item=> item.Start == date);
}

从您的功能名称看来,您希望获得特定日期的所有约会,在这种情况下,您可以这样做:

public IEnumerable<IAppointment> GetAppointmentsOnDate(DateTime date)
{
   return _list.Where(item=> item.Start == date);
}

或在您的特定代码中,您可以使用http://plnkr.co/edit/7bSnk0fU0NBOF1GIwHSK?p=preview关键字返回

public IEnumerable<IAppointment> GetAppointmentsOnDate(DateTime date)
{

    foreach (IAppointment item in _list)
    {
        if (item.Start == date)
        {
            yield return item;
        }
    }
}

然后您可以使用以下内容检索当前日期的约会:

foreach (var appointments in GetAppointmentsOnDate(DateTime.Now))
{

}

正如@Alexei Levenkov指出的那样,如果您想获得特定Date (忽略时间)的约会,请使用DateTime.Date属性GetAppointmentsOnDate(DateTime.Now.Date)GetAppointmentsOnDate(DateTime.Today)

答案 2 :(得分:0)

您的返回类型为IEnumerable<IAppointment>,但您尝试返回IAppointment。这会阻止它编译,我原以为......