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
- TransactionScope.cs
- FontWeightConverter.cs
- SqlConnection.cs
- Converter.cs
- RepeaterItemEventArgs.cs
- ProjectedSlot.cs
- DtrList.cs
- TextEditorSelection.cs
- FastEncoderWindow.cs
- OracleLob.cs
- QilInvokeEarlyBound.cs
- CommentEmitter.cs
- ListItemCollection.cs
- WSDualHttpBindingCollectionElement.cs
- SeekStoryboard.cs
- XmlTypeMapping.cs
- Header.cs
- ConstraintStruct.cs
- GridViewColumnHeader.cs
- CoreSwitches.cs
- TileModeValidation.cs
- ControlEvent.cs
- ControlPaint.cs
- AnchoredBlock.cs
- XsltOutput.cs
- RTLAwareMessageBox.cs
- FormParameter.cs
- FixedSOMLineCollection.cs
- ContextBase.cs
- FontInfo.cs
- TaiwanCalendar.cs
- InstanceCreationEditor.cs
- PriorityRange.cs
- TextTreeTextElementNode.cs
- CodeNamespaceImport.cs
- MemoryMappedFile.cs
- TextEditorTyping.cs
- OraclePermission.cs
- AttachedPropertyMethodSelector.cs
- IndexOutOfRangeException.cs
- XmlAggregates.cs
- Keywords.cs
- ExpressionHelper.cs
- CornerRadius.cs
- SessionStateItemCollection.cs
- AttachedAnnotationChangedEventArgs.cs
- LogExtent.cs
- FormClosedEvent.cs
- Base64Encoder.cs
- WebException.cs
- Freezable.cs
- AuthenticationManager.cs
- ByteStorage.cs
- BindingCollection.cs
- XmlLangPropertyAttribute.cs
- EnterpriseServicesHelper.cs
- WindowsFormsHostPropertyMap.cs
- PagePropertiesChangingEventArgs.cs
- ClientConfigurationHost.cs
- CollectionChangeEventArgs.cs
- AnnotationStore.cs
- WorkflowQueue.cs
- OrderByQueryOptionExpression.cs
- MaskedTextBox.cs
- DataBinding.cs
- DiagnosticTraceSource.cs
- CryptoApi.cs
- WebPartDescription.cs
- SafeEventLogReadHandle.cs
- Visual3D.cs
- PersonalizationDictionary.cs
- DoubleCollectionValueSerializer.cs
- TrackingProfile.cs
- XPathScanner.cs
- SoapAttributeOverrides.cs
- WebRequestModuleElement.cs
- DefaultDiscoveryService.cs
- CollectionViewGroup.cs
- DataSourceControl.cs
- odbcmetadatafactory.cs
- ResourcesChangeInfo.cs
- StringToken.cs
- CodeAccessPermission.cs
- SiteIdentityPermission.cs
- DbConnectionStringBuilder.cs
- LicenseContext.cs
- DoubleAnimationBase.cs
- SafeBitVector32.cs
- MatrixCamera.cs
- DeleteIndexBinder.cs
- TrustLevel.cs
- ListBox.cs
- objectquery_tresulttype.cs
- SystemFonts.cs
- FileSystemWatcher.cs
- PenLineCapValidation.cs
- FileEnumerator.cs
- TextRange.cs
- BuildTopDownAttribute.cs
- SQLChars.cs