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
- SearchForVirtualItemEventArgs.cs
- SqlConnectionString.cs
- DetailsViewInsertedEventArgs.cs
- StateChangeEvent.cs
- _SslStream.cs
- ReflectPropertyDescriptor.cs
- ReferencedAssembly.cs
- LicenseContext.cs
- SeparatorAutomationPeer.cs
- EditorZone.cs
- RoleManagerSection.cs
- SqlInternalConnectionTds.cs
- InkSerializer.cs
- StringConverter.cs
- EdmItemCollection.OcAssemblyCache.cs
- ArrayConverter.cs
- InkPresenter.cs
- ToolStripDropDownItem.cs
- AsynchronousChannelMergeEnumerator.cs
- ZoneIdentityPermission.cs
- CurrencyWrapper.cs
- CustomCategoryAttribute.cs
- CompilerErrorCollection.cs
- XmlSchemaAttributeGroup.cs
- Walker.cs
- StringFreezingAttribute.cs
- BinaryCommonClasses.cs
- XsltFunctions.cs
- PageParser.cs
- EpmSyndicationContentSerializer.cs
- StateFinalizationDesigner.cs
- EngineSiteSapi.cs
- StreamSecurityUpgradeInitiatorAsyncResult.cs
- SettingsPropertyWrongTypeException.cs
- StateChangeEvent.cs
- Token.cs
- ElementNotAvailableException.cs
- HashStream.cs
- OdbcFactory.cs
- XmlTextEncoder.cs
- UnitySerializationHolder.cs
- FontWeights.cs
- MsmqAppDomainProtocolHandler.cs
- HostingEnvironmentException.cs
- SQLSingleStorage.cs
- ProcessModelSection.cs
- ArgIterator.cs
- FaultBookmark.cs
- UpdateManifestForBrowserApplication.cs
- WebPartRestoreVerb.cs
- SatelliteContractVersionAttribute.cs
- TcpClientChannel.cs
- _Events.cs
- PropertyKey.cs
- ParserContext.cs
- WebPartConnectionsDisconnectVerb.cs
- ByteStream.cs
- ECDiffieHellmanCngPublicKey.cs
- TypePropertyEditor.cs
- XslTransform.cs
- SafeRightsManagementHandle.cs
- KeyTimeConverter.cs
- XmlNotation.cs
- NameNode.cs
- WrappedIUnknown.cs
- SqlTrackingQuery.cs
- ThreadStateException.cs
- RowToFieldTransformer.cs
- AnnotationObservableCollection.cs
- AuthenticateEventArgs.cs
- EastAsianLunisolarCalendar.cs
- MarginsConverter.cs
- DashStyle.cs
- MsmqHostedTransportManager.cs
- BamlResourceSerializer.cs
- TableColumn.cs
- SettingsPropertyCollection.cs
- SQLConvert.cs
- LinqDataSourceUpdateEventArgs.cs
- ValidationEventArgs.cs
- XmlSerializableWriter.cs
- CompressedStack.cs
- SubstitutionResponseElement.cs
- EdmValidator.cs
- CFStream.cs
- AbsoluteQuery.cs
- VersionValidator.cs
- StartUpEventArgs.cs
- ColorBlend.cs
- ValueUtilsSmi.cs
- RootBrowserWindowAutomationPeer.cs
- ServicePoint.cs
- HashStream.cs
- ParseChildrenAsPropertiesAttribute.cs
- RelOps.cs
- ApplicationServicesHostFactory.cs
- WSMessageEncoding.cs
- ScriptControl.cs
- DtrList.cs
- TimelineGroup.cs