Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.Activities / System / Activities / Statements / CasesDictionary.cs / 1305376 / CasesDictionary.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Activities.Statements { using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Runtime; class CasesDictionary: IDictionary { bool isNullKeyPresent; TValue nullKeyValue; IDictionary innerDictionary; public CasesDictionary() : base() { this.innerDictionary = new Dictionary (); } public int Count { get { return this.innerDictionary.Count + (this.isNullKeyPresent ? 1 : 0); } } public bool IsReadOnly { get { return false; } } public ICollection Keys { get { return new NullKeyDictionaryKeyCollection (this); } } public ICollection Values { get { return new NullKeyDictionaryValueCollection (this); } } public TValue this[TKey key] { get { if (key == null) { if (this.isNullKeyPresent) { return this.nullKeyValue; } else { throw FxTrace.Exception.AsError(new KeyNotFoundException()); } } else { return this.innerDictionary[key]; } } set { if (key == null) { this.isNullKeyPresent = true; this.nullKeyValue = value; } else { this.innerDictionary[key] = value; } } } public void Add(TKey key, TValue value) { if (key == null) { if (this.isNullKeyPresent) { throw FxTrace.Exception.Argument("key", SR.NullKeyAlreadyPresent); } this.isNullKeyPresent = true; this.nullKeyValue = value; } else { this.innerDictionary.Add(key, value); } } public bool ContainsKey(TKey key) { return key == null ? this.isNullKeyPresent : this.innerDictionary.ContainsKey(key); } public bool Remove(TKey key) { if (key == null) { bool result = this.isNullKeyPresent; this.isNullKeyPresent = false; this.nullKeyValue = default(TValue); return result; } else { return this.innerDictionary.Remove(key); } } public bool TryGetValue(TKey key, out TValue value) { if (key == null) { if (this.isNullKeyPresent) { value = this.nullKeyValue; return true; } else { value = default(TValue); return false; } } else { return this.innerDictionary.TryGetValue(key, out value); } } public void Add(KeyValuePair item) { Add(item.Key, item.Value); } public void Clear() { this.isNullKeyPresent = false; this.nullKeyValue = default(TValue); this.innerDictionary.Clear(); } public bool Contains(KeyValuePair item) { if (item.Key == null) { if (this.isNullKeyPresent) { return item.Value == null ? this.nullKeyValue == null : item.Value.Equals(this.nullKeyValue); } else { return false; } } else { return this.innerDictionary.Contains(item); } } public void CopyTo(KeyValuePair [] array, int arrayIndex) { this.innerDictionary.CopyTo(array, arrayIndex); if (this.isNullKeyPresent) { array[arrayIndex + this.innerDictionary.Count] = new KeyValuePair (default(TKey), this.nullKeyValue); } } public bool Remove(KeyValuePair item) { if (item.Key == null) { if (this.Contains(item)) { this.isNullKeyPresent = false; this.nullKeyValue = default(TValue); return true; } else { return false; } } else { return this.innerDictionary.Remove(item); } } public IEnumerator > GetEnumerator() { IEnumerator > innerEnumerator = this.innerDictionary.GetEnumerator() as IEnumerator >; while (innerEnumerator.MoveNext()) { yield return innerEnumerator.Current; } if (this.isNullKeyPresent) { yield return new KeyValuePair (default(TKey), this.nullKeyValue); } } IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable >)this).GetEnumerator(); } class NullKeyDictionaryKeyCollection : ICollection { CasesDictionary nullKeyDictionary; public NullKeyDictionaryKeyCollection(CasesDictionary nullKeyDictionary) { this.nullKeyDictionary = nullKeyDictionary; } public int Count { get { int count = this.nullKeyDictionary.innerDictionary.Keys.Count; if (this.nullKeyDictionary.isNullKeyPresent) { count++; } return count; } } public bool IsReadOnly { get { return true; } } public void Add(TypeKey item) { throw FxTrace.Exception.AsError(new NotSupportedException(SR.KeyCollectionUpdatesNotAllowed)); } public void Clear() { throw FxTrace.Exception.AsError(new NotSupportedException(SR.KeyCollectionUpdatesNotAllowed)); } public bool Contains(TypeKey item) { return item == null ? this.nullKeyDictionary.isNullKeyPresent : this.nullKeyDictionary.innerDictionary.Keys.Contains(item); } public void CopyTo(TypeKey[] array, int arrayIndex) { this.nullKeyDictionary.innerDictionary.Keys.CopyTo(array, arrayIndex); if (this.nullKeyDictionary.isNullKeyPresent) { array[arrayIndex + this.nullKeyDictionary.innerDictionary.Keys.Count] = default(TypeKey); } } public bool Remove(TypeKey item) { throw FxTrace.Exception.AsError(new NotSupportedException(SR.KeyCollectionUpdatesNotAllowed)); } public IEnumerator GetEnumerator() { foreach (TypeKey item in this.nullKeyDictionary.innerDictionary.Keys) { yield return item; } if (this.nullKeyDictionary.isNullKeyPresent) { yield return default(TypeKey); } } IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable )this).GetEnumerator(); } } class NullKeyDictionaryValueCollection : ICollection { CasesDictionary nullKeyDictionary; public NullKeyDictionaryValueCollection(CasesDictionary nullKeyDictionary) { this.nullKeyDictionary = nullKeyDictionary; } public int Count { get { int count = this.nullKeyDictionary.innerDictionary.Values.Count; if (this.nullKeyDictionary.isNullKeyPresent) { count++; } return count; } } public bool IsReadOnly { get { return true; } } public void Add(TypeValue item) { throw FxTrace.Exception.AsError(new NotSupportedException(SR.ValueCollectionUpdatesNotAllowed)); } public void Clear() { throw FxTrace.Exception.AsError(new NotSupportedException(SR.ValueCollectionUpdatesNotAllowed)); } public bool Contains(TypeValue item) { return this.nullKeyDictionary.innerDictionary.Values.Contains(item) || (this.nullKeyDictionary.isNullKeyPresent && this.nullKeyDictionary.nullKeyValue.Equals(item)); } public void CopyTo(TypeValue[] array, int arrayIndex) { this.nullKeyDictionary.innerDictionary.Values.CopyTo(array, arrayIndex); if (this.nullKeyDictionary.isNullKeyPresent) { array[arrayIndex + this.nullKeyDictionary.innerDictionary.Values.Count] = this.nullKeyDictionary.nullKeyValue; } } public bool Remove(TypeValue item) { throw FxTrace.Exception.AsError(new NotSupportedException(SR.ValueCollectionUpdatesNotAllowed)); } public IEnumerator GetEnumerator() { foreach (TypeValue item in this.nullKeyDictionary.innerDictionary.Values) { yield return item; } if (this.nullKeyDictionary.isNullKeyPresent) { yield return this.nullKeyDictionary.nullKeyValue; } } IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable )this).GetEnumerator(); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- AcceptorSessionSymmetricMessageSecurityProtocol.cs
- DataGridViewRow.cs
- SQLResource.cs
- XamlTreeBuilderBamlRecordWriter.cs
- ProgressBarRenderer.cs
- BuildProvider.cs
- IPipelineRuntime.cs
- ProfileSettingsCollection.cs
- ColumnCollection.cs
- SafeRightsManagementSessionHandle.cs
- BuildResult.cs
- OutputCacheSettings.cs
- HwndHost.cs
- MtomMessageEncoder.cs
- DesignTimeValidationFeature.cs
- DuplexChannelBinder.cs
- Activator.cs
- LayoutSettings.cs
- Membership.cs
- XmlChildEnumerator.cs
- SizeF.cs
- GC.cs
- FormViewDeleteEventArgs.cs
- EventWaitHandleSecurity.cs
- ListParaClient.cs
- PasswordDeriveBytes.cs
- WsdlImporterElementCollection.cs
- ArrangedElementCollection.cs
- ListManagerBindingsCollection.cs
- BamlTreeMap.cs
- EditCommandColumn.cs
- FunctionImportElement.cs
- DesignerEditorPartChrome.cs
- AppliedDeviceFiltersDialog.cs
- TransformerInfoCollection.cs
- baseshape.cs
- EntityTransaction.cs
- X509ChainElement.cs
- SHA1Managed.cs
- OrderedDictionary.cs
- KeyBinding.cs
- ConfigurationManager.cs
- StringUtil.cs
- TextServicesCompartmentEventSink.cs
- RangeValidator.cs
- DataGridAutoFormatDialog.cs
- XsdDuration.cs
- hresults.cs
- LinearKeyFrames.cs
- ListViewSelectEventArgs.cs
- PolicyException.cs
- WebPartConnectionsConnectVerb.cs
- FigureParagraph.cs
- StorageEntityTypeMapping.cs
- InheritablePropertyChangeInfo.cs
- ConsumerConnectionPoint.cs
- OAVariantLib.cs
- WorkflowHostingResponseContext.cs
- SHA512.cs
- ContentValidator.cs
- MailAddress.cs
- Number.cs
- AsmxEndpointPickerExtension.cs
- ButtonChrome.cs
- AutomationEventArgs.cs
- DirectoryGroupQuery.cs
- HttpNamespaceReservationInstallComponent.cs
- SqlDataAdapter.cs
- HtmlInputButton.cs
- AuthenticationService.cs
- HttpHandlerAction.cs
- ToolStripHighContrastRenderer.cs
- HighlightComponent.cs
- _SingleItemRequestCache.cs
- smtppermission.cs
- RegisteredScript.cs
- DynamicValueConverter.cs
- BaseCodeDomTreeGenerator.cs
- XmlParserContext.cs
- ToolStripStatusLabel.cs
- CfgParser.cs
- HttpHandlersSection.cs
- ExtractorMetadata.cs
- ErrorRuntimeConfig.cs
- SchemaImporterExtensionElement.cs
- EntityStoreSchemaFilterEntry.cs
- EtwTrace.cs
- ContextDataSourceContextData.cs
- XmlSerializerSection.cs
- DateTimeValueSerializerContext.cs
- DoubleStorage.cs
- Scene3D.cs
- HwndAppCommandInputProvider.cs
- TransactionManager.cs
- Keyboard.cs
- Vector3DCollection.cs
- DataGridColumnHeadersPresenterAutomationPeer.cs
- DataGridViewCellStyleContentChangedEventArgs.cs
- _StreamFramer.cs
- CommentAction.cs