Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Metadata / Edm / FacetValueContainer.cs / 1305376 / FacetValueContainer.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; namespace System.Data.Metadata.Edm { ////// This Class is never expected to be used except for by the FacetValues class. /// /// The purpose of this class is to allow strong type checking by the compiler while setting facet values which /// are typically stored as Object because they can either on of these things /// /// 1. null /// 2. scalar type (bool, int, byte) /// 3. Unbounded object /// /// without this class it would be very easy to accidentally set precision to an int when it really is supposed to be /// a byte value. Also you would be able to set the facet value to any Object derived class (ANYTHING!!!) when really only /// null and Unbounded are allowed besides an actual scalar value. The magic of the class happens in the implicit constructors with /// allow patterns like /// /// new FacetValues( MaxLength = EdmConstants.UnboundedValue, Nullable = true}; /// /// and these are type checked at compile time /// ///internal struct FacetValueContainer { T _value; bool _hasValue; bool _isUnbounded; internal T Value { set { _isUnbounded = false; _hasValue = true; _value = value; } } private void SetUnbounded() { _isUnbounded = true; _hasValue = true; } // don't add an implicit conversion from object because it will kill the compile time type checking. public static implicit operator FacetValueContainer (System.Data.Metadata.Edm.EdmConstants.Unbounded unbounded) { Debug.Assert(object.ReferenceEquals(unbounded, EdmConstants.UnboundedValue), "you must pass the unbounded value. If you are trying to set null, use the T parameter overload"); FacetValueContainer container = new FacetValueContainer (); container.SetUnbounded(); return container; } public static implicit operator FacetValueContainer (T value) { FacetValueContainer container = new FacetValueContainer (); container.Value = value; return container; } internal object GetValueAsObject() { Debug.Assert(_hasValue, "Don't get the value if it has not been set"); if (_isUnbounded) { return EdmConstants.UnboundedValue; } else { return (object)_value; } } internal bool HasValue { get { return _hasValue; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; namespace System.Data.Metadata.Edm { ////// This Class is never expected to be used except for by the FacetValues class. /// /// The purpose of this class is to allow strong type checking by the compiler while setting facet values which /// are typically stored as Object because they can either on of these things /// /// 1. null /// 2. scalar type (bool, int, byte) /// 3. Unbounded object /// /// without this class it would be very easy to accidentally set precision to an int when it really is supposed to be /// a byte value. Also you would be able to set the facet value to any Object derived class (ANYTHING!!!) when really only /// null and Unbounded are allowed besides an actual scalar value. The magic of the class happens in the implicit constructors with /// allow patterns like /// /// new FacetValues( MaxLength = EdmConstants.UnboundedValue, Nullable = true}; /// /// and these are type checked at compile time /// ///internal struct FacetValueContainer { T _value; bool _hasValue; bool _isUnbounded; internal T Value { set { _isUnbounded = false; _hasValue = true; _value = value; } } private void SetUnbounded() { _isUnbounded = true; _hasValue = true; } // don't add an implicit conversion from object because it will kill the compile time type checking. public static implicit operator FacetValueContainer (System.Data.Metadata.Edm.EdmConstants.Unbounded unbounded) { Debug.Assert(object.ReferenceEquals(unbounded, EdmConstants.UnboundedValue), "you must pass the unbounded value. If you are trying to set null, use the T parameter overload"); FacetValueContainer container = new FacetValueContainer (); container.SetUnbounded(); return container; } public static implicit operator FacetValueContainer (T value) { FacetValueContainer container = new FacetValueContainer (); container.Value = value; return container; } internal object GetValueAsObject() { Debug.Assert(_hasValue, "Don't get the value if it has not been set"); if (_isUnbounded) { return EdmConstants.UnboundedValue; } else { return (object)_value; } } internal bool HasValue { get { return _hasValue; } } } } // 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
- assertwrapper.cs
- StylusEventArgs.cs
- LabelLiteral.cs
- Baml6Assembly.cs
- ToolStripItemBehavior.cs
- FormsAuthenticationModule.cs
- LayoutSettings.cs
- _ScatterGatherBuffers.cs
- DataServiceClientException.cs
- DataGridTextBoxColumn.cs
- DecoderReplacementFallback.cs
- VisualStyleElement.cs
- LayoutEditorPart.cs
- GlobalEventManager.cs
- XmlAggregates.cs
- xdrvalidator.cs
- MetafileHeaderEmf.cs
- ContextMenuStrip.cs
- ScriptingWebServicesSectionGroup.cs
- SecurityUtils.cs
- StreamInfo.cs
- PropertyToken.cs
- mediaclock.cs
- WorkflowInstanceExtensionProvider.cs
- StaticSiteMapProvider.cs
- ViewBox.cs
- CodeAccessPermission.cs
- SqlGenericUtil.cs
- UndirectedGraph.cs
- Hex.cs
- DeleteBookmarkScope.cs
- CapiNative.cs
- VersionUtil.cs
- MappingSource.cs
- BamlLocalizabilityResolver.cs
- ValidationError.cs
- NotifyCollectionChangedEventArgs.cs
- ColorContext.cs
- SmtpLoginAuthenticationModule.cs
- UnknownBitmapDecoder.cs
- HyperLinkField.cs
- MediaPlayerState.cs
- BaseResourcesBuildProvider.cs
- OleTxTransactionInfo.cs
- elementinformation.cs
- WebPartCollection.cs
- XPathNavigatorReader.cs
- XdrBuilder.cs
- ProfileServiceManager.cs
- ArrayExtension.cs
- QilFunction.cs
- CommandPlan.cs
- X509CertificateEndpointIdentity.cs
- XPathParser.cs
- ModuleConfigurationInfo.cs
- EmptyStringExpandableObjectConverter.cs
- HierarchicalDataBoundControlAdapter.cs
- DataBindingCollectionEditor.cs
- EntityType.cs
- Item.cs
- DataGridViewCellStyle.cs
- DataGridToolTip.cs
- ItemList.cs
- DesignerView.xaml.cs
- ping.cs
- XmlSchemaSimpleTypeRestriction.cs
- SiteMap.cs
- BCLDebug.cs
- ListViewAutomationPeer.cs
- FtpWebRequest.cs
- TraceHwndHost.cs
- _SecureChannel.cs
- IndexObject.cs
- XsltSettings.cs
- ReflectionUtil.cs
- ButtonRenderer.cs
- SafeMemoryMappedFileHandle.cs
- CellRelation.cs
- ExtendedPropertyDescriptor.cs
- TabItemWrapperAutomationPeer.cs
- FileSecurity.cs
- ContainerUIElement3D.cs
- DataGridItemEventArgs.cs
- PackWebResponse.cs
- ParallelEnumerable.cs
- Brushes.cs
- IInstanceTable.cs
- FederatedMessageSecurityOverHttp.cs
- VisualTreeUtils.cs
- NetworkInformationPermission.cs
- wgx_exports.cs
- SharedConnectionWorkflowTransactionService.cs
- Script.cs
- TextContainerChangedEventArgs.cs
- Version.cs
- NodeLabelEditEvent.cs
- ResXBuildProvider.cs
- CodeDefaultValueExpression.cs
- XmlAnyElementAttributes.cs
- UTF7Encoding.cs