Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- StopStoryboard.cs
- SiteMapNodeItem.cs
- PermissionSet.cs
- PropertyIDSet.cs
- WebDescriptionAttribute.cs
- ObjectDataSourceEventArgs.cs
- TextServicesCompartment.cs
- EmissiveMaterial.cs
- ControlDesigner.cs
- ForEachAction.cs
- PersonalizationState.cs
- ComboBoxAutomationPeer.cs
- SmtpTransport.cs
- QilReference.cs
- ReturnEventArgs.cs
- HtmlInputText.cs
- WebChannelFactory.cs
- JournalNavigationScope.cs
- FileDialogCustomPlacesCollection.cs
- MemoryResponseElement.cs
- StrongNameKeyPair.cs
- AsyncOperationManager.cs
- TreeViewTemplateSelector.cs
- PathFigureCollectionConverter.cs
- VarInfo.cs
- XmlSortKey.cs
- BitmapEffectInput.cs
- GlyphCache.cs
- SizeConverter.cs
- TrackingConditionCollection.cs
- AppDomainProtocolHandler.cs
- XmlQueryType.cs
- PackagePartCollection.cs
- ACE.cs
- TripleDESCryptoServiceProvider.cs
- PartitionerStatic.cs
- StringValueConverter.cs
- RichTextBox.cs
- EntityReference.cs
- BitmapCodecInfo.cs
- QilIterator.cs
- ReaderContextStackData.cs
- DateTimeValueSerializerContext.cs
- Query.cs
- ProviderUtil.cs
- AuthorizationRuleCollection.cs
- __Error.cs
- NotificationContext.cs
- TimeSpan.cs
- TrimSurroundingWhitespaceAttribute.cs
- XmlIlGenerator.cs
- LabelDesigner.cs
- CodeSubDirectoriesCollection.cs
- DoubleKeyFrameCollection.cs
- CurrencyWrapper.cs
- XmlSchemaAttributeGroupRef.cs
- PeerNameRegistration.cs
- FixedHyperLink.cs
- ToolStripTextBox.cs
- HttpModulesSection.cs
- EntityDataSourceWizardForm.cs
- ButtonBaseAutomationPeer.cs
- SerializerDescriptor.cs
- TextFormatterHost.cs
- loginstatus.cs
- PathFigure.cs
- DropTarget.cs
- PersistenceTypeAttribute.cs
- SamlSerializer.cs
- RealProxy.cs
- MenuStrip.cs
- Registry.cs
- ScriptControlManager.cs
- DependencyObjectProvider.cs
- AppSettingsExpressionBuilder.cs
- ColorKeyFrameCollection.cs
- ObjectDataSourceChooseMethodsPanel.cs
- OdbcException.cs
- LineBreak.cs
- PropertyPathWorker.cs
- MergeExecutor.cs
- CookieHandler.cs
- TableRowCollection.cs
- EntityDesignerDataSourceView.cs
- SystemIcons.cs
- Operators.cs
- TreeNodeBinding.cs
- BaseWebProxyFinder.cs
- IncomingWebRequestContext.cs
- SmtpReplyReaderFactory.cs
- ExtendedProtectionPolicyTypeConverter.cs
- ExceptionUtil.cs
- TextAdaptor.cs
- CaseInsensitiveHashCodeProvider.cs
- OleDbReferenceCollection.cs
- ListSortDescription.cs
- LocalFileSettingsProvider.cs
- RadioButtonPopupAdapter.cs
- ContextBase.cs
- SqlCommandSet.cs