Cached Property: Easier way?
In .NET 3.5 or earlier, what you have is a very standard practice, and a fine model.
(Although, I would suggest returning IList<T>
, or IEnumerable<T>
if possible, instead of List<T>
in your public API - List<T>
should be an implementation detail...)
In .NET 4, however, there is a simpler option here: Lazy<T>
. This lets you do:
private Lazy<IList<Note>> notes;
public IEnumerable<Note> Notes
{
get
{
return this.notes.Value;
}
}
// In constructor:
this.notes = new Lazy<IList<Note>>(this.CalcNotes);
As far as syntax goes, you can use the null-coalescing operator if you want to be fancy, but it's not necessarily as readable.
get
{
return notes ?? (notes = CalcNotes());
}
Edit: Updated courtesy of Matthew. Also, I think the other answers are more helpful to the question asker!