返回特定日期的事件枚举

本文关键字:事件 枚举 日期 返回 | 更新日期: 2023-09-27 17:53:42

我正在尝试编写一个函数,返回由以下代码组成的'约会'项目的枚举-

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

函数应该从列表中检索"appointment"项。我已经在类的顶部实例化了列表,它可以被从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 -检索指定日期上发生的所有约会的枚举

返回特定日期的事件枚举

使用yield关键词:

public IEnumerable<IAppointment> GetAppointmentsOnDate(DateTime date)
    {
        foreach (IAppointment item in _list)
        {
            if(item.Start == date)
            {
                yield return item;  
            }
        }
    }

或者直接使用Where来实现您的条件(不要忘记包括import System.Linq;):

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

函数应该从列表中检索一个"约会"项列表。

你试图返回一个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);
}

或者在您的特定代码中,您可以使用yield关键字返回

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)

您的返回类型是IEnumerable<IAppointment>,但您正在尝试返回IAppointment。这会停止编译,我想。