私はIvanのコメントに同意します。その文脈での変異状態は、コードの匂いで終わる傾向があります。
しかし、一つは、その道を行くことを主張するならば、私は、少なくとも例えばのように、状態変異をカプセル化しようと思い、
(不自然)
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、
簡単な質問、なぜですか?それはおそらく実行可能ですが、リスト内の各項目について同じminを繰り返し再計算することを意味します。 – Sehnsucht
ここではIDEを使用しないでください: 'return userRecords.Where(x => x.FromDate!= userRecords.Min ({ x.IsInitialRecord = false; return x; }); – Max
@Maxはい、それは可能な解決策ですが残念ながら私は 'SkipWhile'を持っています日付までに最小値を除外し、他の要素を更新する前に、リクエストフィルターを適用するための呼び出し。 – user3818229