private void EnsureIsMaterialized() { ThrowIfDisposed(); if (!_isMaterialized) { var values = Materialize(); try { _isMaterialized = true; base.AddRange(values); MaterializeCompleted(); } catch { base.Clear(); _isMaterialized = false; throw; } } } }