/// <summary> /// Promotes the class from the old type to the new type and returns the new /// ExpandoData object. /// </summary> private ExpandoData PromoteClassCore(ExpandoClass oldClass, ExpandoClass newClass) { Debug.Assert(oldClass != newClass); ContractUtils.AssertLockHeld(LockObject); if (_data.Class == oldClass) { _data = _data.UpdateClass(newClass); } return(_data); }
/// <summary> /// Returns true if the member at the specified index has been deleted, /// otherwise false. Call this function holding the lock. /// </summary> internal bool IsDeletedMember(int index) { ContractUtils.AssertLockHeld(LockObject); Debug.Assert(index >= 0 && index <= _data.Length); if (index == _data.Length) { // The member is a newly added by SetMemberBinder and not in data yet return(false); } return(_data[index] == ExpandoObject.Uninitialized); }
private bool ExpandoContainsKey(string key) { ContractUtils.AssertLockHeld(LockObject); return(_data.Class.GetValueIndexCaseSensitive(key) >= 0); }