为什么在设置值后对象的属性为null?

时间:2017-12-17 10:28:39

标签: c# .net

我有这种类型:

public partial class ReportTrafficDepartment
{
    public int _id;

    public System.Nullable<int> _siteNum;

    public System.Nullable<System.DateTime> _dateReport;

    public string _siteName;

    public System.Nullable<int> _prog1;

    public System.Nullable<int> _progLayout1;

    public System.Nullable<int> _prog2;
}

这个功能:

private void setDate(IEnumerable<ReportTrafficDepartment> report, int year, int month)
{
    report.Select(r => r.dateReport = new System.DateTime(year, month, 1));
} 

如您所见,我尝试迭代ReportTrafficDepartment对象的集合并设置dateReport属性。

但是在执行方法之后,所有ReportTrafficDepartment对象的属性都为null。

我做错了什么?为什么所有ReportTrafficDepartment objets的属性都为null?

1 个答案:

答案 0 :(得分:6)

不要这样做,使用linq来实现副作用通常是一个非常糟糕的主意。

你的问题是linq 是懒惰的,你没有迭代投影,因此永远不会发生任务。这是linq查询中副作用可能导致意外结果的原因之一。

如果你真的很想做到这一点,你必须让SetDate重复Select查询,急切地调用Count()ToList()等。但同样,这是一个坏主意,只需使用foreach块来执行此操作。