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
- ButtonBaseDesigner.cs
- lengthconverter.cs
- CompModSwitches.cs
- Evaluator.cs
- DrawListViewSubItemEventArgs.cs
- GlyphingCache.cs
- BooleanKeyFrameCollection.cs
- XamlWrapperReaders.cs
- _DisconnectOverlappedAsyncResult.cs
- OracleParameterBinding.cs
- UpdateCommand.cs
- LateBoundBitmapDecoder.cs
- ProgressiveCrcCalculatingStream.cs
- ObjectDataSource.cs
- basenumberconverter.cs
- cookie.cs
- ProcessHostMapPath.cs
- DiagnosticsConfiguration.cs
- ShapeTypeface.cs
- UpdateException.cs
- ComponentCommands.cs
- MethodCallConverter.cs
- sqlstateclientmanager.cs
- mactripleDES.cs
- IInstanceTable.cs
- ProtectedConfigurationProviderCollection.cs
- DesignerAdapterUtil.cs
- EditorPartChrome.cs
- XPathSingletonIterator.cs
- UnsafePeerToPeerMethods.cs
- ProgressiveCrcCalculatingStream.cs
- UrlEncodedParameterWriter.cs
- IxmlLineInfo.cs
- TextTreeDeleteContentUndoUnit.cs
- MimeMapping.cs
- SspiSecurityTokenProvider.cs
- SecUtil.cs
- HebrewNumber.cs
- DefaultProxySection.cs
- brushes.cs
- _SslState.cs
- HttpBindingExtension.cs
- DoWhileDesigner.xaml.cs
- TypeNameConverter.cs
- UnmanagedMarshal.cs
- TypeName.cs
- ProfilePropertySettings.cs
- ViewStateModeByIdAttribute.cs
- httpapplicationstate.cs
- BitmapEffectInput.cs
- SqlClientFactory.cs
- PackagingUtilities.cs
- XPathNode.cs
- UrlMapping.cs
- ClientCredentialsElement.cs
- XmlSchemaSimpleContentRestriction.cs
- IntegerFacetDescriptionElement.cs
- XsdDateTime.cs
- SQLBoolean.cs
- VisualProxy.cs
- SafeArrayRankMismatchException.cs
- SafeLibraryHandle.cs
- PseudoWebRequest.cs
- DataGridTableCollection.cs
- ResourceIDHelper.cs
- LinkDescriptor.cs
- Fx.cs
- EntryPointNotFoundException.cs
- ConstructorNeedsTagAttribute.cs
- ADMembershipUser.cs
- IPHostEntry.cs
- NonSerializedAttribute.cs
- HuffmanTree.cs
- PictureBox.cs
- QueryCacheEntry.cs
- ClientScriptManager.cs
- AbstractDataSvcMapFileLoader.cs
- SectionInformation.cs
- Token.cs
- StreamGeometryContext.cs
- WebPartDescriptionCollection.cs
- ToolStripDesigner.cs
- ActivityStateRecord.cs
- ApplicationBuildProvider.cs
- RoutingSection.cs
- QuerySettings.cs
- WeakReferenceEnumerator.cs
- SqlDataSourceCache.cs
- Drawing.cs
- SelectingProviderEventArgs.cs
- DesignTimeParseData.cs
- X509Certificate.cs
- AnimationStorage.cs
- BooleanProjectedSlot.cs
- _SecureChannel.cs
- WindowsGraphics2.cs
- TableLayoutCellPaintEventArgs.cs
- ExtractedStateEntry.cs
- TextModifierScope.cs
- SystemIPInterfaceStatistics.cs