我正在尝试编写一个函数,该函数返回包含以下代码的“约会”项的枚举 -
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
- 检索指定日期上发生的所有约会的枚举。
答案 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
。这会阻止它编译,我原以为......