Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / ndp / fx / src / DataEntity / System / Data / Metadata / Edm / FacetValueContainer.cs / 1 / FacetValueContainer.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....], [....] //--------------------------------------------------------------------- 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 [....], [....] //--------------------------------------------------------------------- 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
- RenameRuleObjectDialog.Designer.cs
- TreeViewHitTestInfo.cs
- AttachedAnnotationChangedEventArgs.cs
- LogRestartAreaEnumerator.cs
- CompressionTransform.cs
- CLRBindingWorker.cs
- SByteStorage.cs
- Part.cs
- RemotingServices.cs
- SqlReorderer.cs
- StreamInfo.cs
- WeakReferenceEnumerator.cs
- StreamGeometry.cs
- UTF7Encoding.cs
- ProcessHostConfigUtils.cs
- RootBrowserWindowProxy.cs
- SQLCharsStorage.cs
- Missing.cs
- PrintDocument.cs
- DataGridState.cs
- COM2IDispatchConverter.cs
- ForAllOperator.cs
- FlowDocumentReader.cs
- FunctionNode.cs
- DesignerProperties.cs
- SettingsPropertyValueCollection.cs
- InvokeHandlers.cs
- ErrorRuntimeConfig.cs
- ThousandthOfEmRealDoubles.cs
- EventNotify.cs
- InputLanguageSource.cs
- ExeConfigurationFileMap.cs
- Italic.cs
- HwndAppCommandInputProvider.cs
- ValidationUtility.cs
- TextElement.cs
- TemplateBindingExtension.cs
- WpfXamlType.cs
- EntitySqlException.cs
- OAVariantLib.cs
- TreeNode.cs
- ToolStripSeparatorRenderEventArgs.cs
- SimpleHandlerBuildProvider.cs
- URIFormatException.cs
- FlowDocumentReaderAutomationPeer.cs
- StreamSecurityUpgradeProvider.cs
- Substitution.cs
- log.cs
- SendMailErrorEventArgs.cs
- SynchronizedPool.cs
- IxmlLineInfo.cs
- GlyphTypeface.cs
- DataGridViewTextBoxColumn.cs
- Rotation3D.cs
- TextContainerChangeEventArgs.cs
- EventSourceCreationData.cs
- KnownIds.cs
- GreenMethods.cs
- Form.cs
- Light.cs
- OperationResponse.cs
- NotConverter.cs
- ApplicationSecurityManager.cs
- XmlSchemaDocumentation.cs
- RegexWorker.cs
- SpellCheck.cs
- XappLauncher.cs
- DependencySource.cs
- DispatcherSynchronizationContext.cs
- LineInfo.cs
- KeyedCollection.cs
- AdjustableArrowCap.cs
- DrawItemEvent.cs
- WebRequestModulesSection.cs
- CommonProperties.cs
- FontEmbeddingManager.cs
- CircleHotSpot.cs
- WinCategoryAttribute.cs
- SqlOuterApplyReducer.cs
- RawStylusSystemGestureInputReport.cs
- VectorCollectionValueSerializer.cs
- GeometryModel3D.cs
- FormsAuthenticationTicket.cs
- XamlInt32CollectionSerializer.cs
- ListViewTableRow.cs
- BooleanAnimationUsingKeyFrames.cs
- FragmentQueryProcessor.cs
- ConnectionDemuxer.cs
- InstancePersistenceCommand.cs
- RouteParser.cs
- SecurityDescriptor.cs
- MethodExpr.cs
- CodeConstructor.cs
- ProcessModule.cs
- DATA_BLOB.cs
- ChildTable.cs
- SnapshotChangeTrackingStrategy.cs
- CollectionViewSource.cs
- GridEntry.cs
- DynamicPhysicalDiscoSearcher.cs