C# 返回特定日期的事件枚举

C# 返回特定日期的事件枚举,c#,C#,我正在尝试编写一个函数,该函数返回由以下代码组成的“约会”项枚举- public interface IAppointment { DateTime Start { get; } int Length { get; } string DisplayableDescription { get; } bool OccursOnDate(DateTime date); } 该函数用于从列表中检索“约会”项。我列举了类顶部的列表,所有从IList接口实现的方法都可以全局

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

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'
        }
    }
}
public IEnumerable GetAppointmentsOnDate(日期时间日期)
{
foreach(列表中的应用项目)
{
如果(item.Start.Date==Date.Date)
{
return item;//此处“item”下出现错误
}
}
}
错误:

无法将类型
“…iappoint”
隐式转换为
“System.Collections.Generic.IEnumerable”
。存在显式转换(是否缺少强制转换?)


这是此函数的分配规范:
getAppointsonDate
-检索在指定日期发生的所有约会的枚举

该函数应该从列表中检索“约会”项 名单

您正试图返回一个
IEnumerable
,这将是一个约会的集合,但从代码和描述来看,您似乎想要返回单个项目,请在方法中将您的返回类型更改为
iappoint

您还可以使用
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);
}
然后,您可以使用以下内容检索当前日期的约会:

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

}

正如@Alexei Levenkov所指出的,如果您想获得特定日期的约会(忽略时间),那么使用
DateTime.Date
属性,比如
getAppointsonDate(DateTime.Now.Date)
getAppointsonDate(DateTime.Today)

您的返回类型是
IEnumerable
,但您正在尝试返回
iappoint
。这将停止编译,我会想…

使用yield关键字:

public IEnumerable<IAppointment> GetAppointmentsOnDate(DateTime date)
    {

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

    }

该方法被称为
getAppointsonDate
这一事实使得它听起来应该返回多个。但是OP的意图在这里有点混乱。虽然它确实是编译时错误的解决方案,但函数的名称表明集合返回类型(“GetAppointsonDate”)@AlexeiLevenkov,是的,名称听起来像OP想要多个约会,我错过了,但描述也非常明确“从列表中检索“约会”项。,我将修改我的答案。这是此函数的分配规范-GetAppointsonDate-检索在指定日期发生的所有约会的枚举。但是,我不知道该怎么办this@Habib很好的更新!考虑在代码中使用<代码>日期时间>日期<代码>,使代码完全与函数NAM.FYI对齐,如果<代码>长度意味着您可能需要考虑使用<代码> TimeSpAs/COD>而不是<代码> int <代码>的约会。这样你就不必猜单位是多少了,这会使时间计算更容易。谢谢。我想使用timespan,然而,我的编程信心非常低,我担心它可能会破坏其他一些类中的其余“predone”代码。另外,请注意,如果
date
只是约会发生的当天,而
Start
是约会开始的日期和时间,那么您将需要执行
项。Start.date==date
,如果
Date
有时间,甚至可能
item.Start.Date==Date.Date
Date
属性基本上返回一个日期相同但时间设置为午夜的
DateTime
。太好了。谢谢你。我猜应该把范围缩小到实际的一天而不是时间?
public IEnumerable<IAppointment> GetAppointmentsOnDate(DateTime date)
    {

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

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