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
- ProviderSettingsCollection.cs
- ConstructorArgumentAttribute.cs
- RIPEMD160Managed.cs
- PixelFormat.cs
- ValidationPropertyAttribute.cs
- TypeReference.cs
- XmlDownloadManager.cs
- InternalTypeHelper.cs
- Socket.cs
- _StreamFramer.cs
- DesignerSerializationOptionsAttribute.cs
- ListViewInsertedEventArgs.cs
- SqlBulkCopy.cs
- XmlSortKey.cs
- NegotiateStream.cs
- HttpPostedFileBase.cs
- DotAtomReader.cs
- WebBrowserUriTypeConverter.cs
- SqlMethodAttribute.cs
- BaseDataBoundControl.cs
- altserialization.cs
- WebPartConnection.cs
- WebPartTransformerAttribute.cs
- Error.cs
- OdbcCommandBuilder.cs
- PropertyInformation.cs
- RIPEMD160.cs
- NullableDoubleAverageAggregationOperator.cs
- DateBoldEvent.cs
- ImageConverter.cs
- BitSet.cs
- SectionInformation.cs
- LinqDataSourceStatusEventArgs.cs
- ValueConversionAttribute.cs
- FileDialog.cs
- XmlSignatureManifest.cs
- AnimationTimeline.cs
- TraceXPathNavigator.cs
- Binding.cs
- CompositeDataBoundControl.cs
- RectangleGeometry.cs
- HttpProcessUtility.cs
- HostProtectionException.cs
- ConfigurationSettings.cs
- odbcmetadatafactory.cs
- FigureParagraph.cs
- ClientTargetCollection.cs
- HandlerFactoryCache.cs
- InputLanguageProfileNotifySink.cs
- PageCache.cs
- QueryReaderSettings.cs
- SQLResource.cs
- GroupStyle.cs
- BindingSource.cs
- BufferBuilder.cs
- ScriptReference.cs
- CompilerWrapper.cs
- XmlSchemaException.cs
- StrongBox.cs
- MobileCapabilities.cs
- ValidationSummary.cs
- WebBrowserNavigatedEventHandler.cs
- IisHelper.cs
- AttachedPropertyBrowsableAttribute.cs
- SystemTcpStatistics.cs
- EmptyCollection.cs
- WpfSharedBamlSchemaContext.cs
- CredentialCache.cs
- CheckBoxRenderer.cs
- ForceCopyBuildProvider.cs
- RegexMatchCollection.cs
- DecimalKeyFrameCollection.cs
- PopupRoot.cs
- HashCodeCombiner.cs
- LogicalTreeHelper.cs
- BaseHashHelper.cs
- WindowsScroll.cs
- VarRemapper.cs
- SequentialUshortCollection.cs
- WindowsUserNameSecurityTokenAuthenticator.cs
- NotifyCollectionChangedEventArgs.cs
- NumberFormatter.cs
- XmlSchemaFacet.cs
- ContractMapping.cs
- SqlGenericUtil.cs
- XmlObjectSerializerReadContext.cs
- NamespaceMapping.cs
- SqlPersonalizationProvider.cs
- VectorAnimationUsingKeyFrames.cs
- InvokeWebServiceDesigner.cs
- StringArrayConverter.cs
- DataStreamFromComStream.cs
- LogReserveAndAppendState.cs
- TransactionChannelFactory.cs
- Italic.cs
- GridViewDeleteEventArgs.cs
- PrinterUnitConvert.cs
- InvokeWebServiceDesigner.cs
- _SpnDictionary.cs
- GrammarBuilderRuleRef.cs