返回特定日期的事件枚举
本文关键字:事件 枚举 日期 返回 | 更新日期: 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
。这会停止编译,我想。