我同意伊万的评论说,在这种情况下变异状态很容易出现代码异味。
但是,如果一个会坚持走这条道路,我想至少尝试封装状态突变,如在例如,
(人为)
public class UserRecord
{
public UserRecord(DateTime fromDate)
{
FromDate = fromDate;
AfterUpdate(true);
}
public UserRecord AfterUpdate(bool initialRecord)
{
IsInitialRecord = initialRecord;
return this;
}
public DateTime FromDate { get; private set; }
public bool IsInitialRecord { get; private set; }
}
public static void Main(string[] args)
{
var userRecords =
new[]
{
new UserRecord(new DateTime(1900, 1, 1)),
new UserRecord(new DateTime(1801, 1, 1)),
new UserRecord(new DateTime(1913, 1, 1)),
new UserRecord(new DateTime(1850, 1, 1))
};
var updatedRecords =
(
from minDate in new[] { userRecords.Min(r => r.FromDate) }
from record in userRecords
where record.FromDate > minDate
select record.AfterUpdate(false)
);
foreach (var record in updatedRecords)
{
Console.WriteLine("{0} ({1})", record.FromDate, record.IsInitialRecord);
}
// Etc...
}
“HTH,
简单的问题,为什么?这可能是可行的,但这也意味着重复计算清单中每个项目的相同分钟数 – Sehnsucht
不要在这里有一个IDE atm,你可以尝试:'return userRecords.Where(x => x.FromDate!= userRecords.Min (y => y.FromDate))选择(x => x.IsInitialRecord = false; return x; });' – Max
@Max是的,这是一个可能的解决方案,但不幸的是我有'SkipWhile'在需要按日期排除最小值并更新其他元素之前,调用以应用请求过滤器。 – user3818229