protected ImmutableModelSet <T> GetSet <T>(ModelProperty property, ref ImmutableModelSet <T> value) { ImmutableModelSet <T> result = value; if (result == null) { result = this.model.GetSet <T>(this.id, property); result = Interlocked.CompareExchange(ref value, result, null) ?? result; } return(result); }
internal ImmutableModelSet <T> GetSet <T>(ObjectId oid, ModelProperty property) { Debug.Assert(property.IsCollection); var greenValue = this.GetGreenValue(oid, property); if (greenValue is GreenList) { return(ImmutableModelSet <T> .FromGreenList((GreenList)greenValue, this, oid)); } else { Slot slot = oid.Descriptor.GetSlot(property); if (!slot.IsCollection) { return(ImmutableModelSet <T> .FromGreenSingleValue(greenValue, this, oid)); } } return(ImmutableModelSet <T> .FromGreenList(property.IsUnique?GreenList.EmptyUnique : GreenList.EmptyNonUnique, this, oid)); }