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
- Vector3DAnimationUsingKeyFrames.cs
- MobileControlDesigner.cs
- PrincipalPermission.cs
- MediaSystem.cs
- ControlBuilderAttribute.cs
- RegexCharClass.cs
- XamlPathDataSerializer.cs
- TimelineClockCollection.cs
- WindowsPrincipal.cs
- LiteralControl.cs
- XmlChildNodes.cs
- mansign.cs
- HtmlTernaryTree.cs
- IMembershipProvider.cs
- RootBrowserWindowAutomationPeer.cs
- GraphicsContainer.cs
- AttributeUsageAttribute.cs
- XPathChildIterator.cs
- WindowsEditBoxRange.cs
- DataGridLinkButton.cs
- DivideByZeroException.cs
- CodeNamespaceImport.cs
- WmpBitmapEncoder.cs
- XsltException.cs
- GridViewColumnHeader.cs
- messageonlyhwndwrapper.cs
- PrintPreviewDialog.cs
- UnsafePeerToPeerMethods.cs
- WebServiceHostFactory.cs
- DataColumnMappingCollection.cs
- VectorCollectionConverter.cs
- ClientConfigurationSystem.cs
- ConfigurationStrings.cs
- RadioButtonList.cs
- CellPartitioner.cs
- QueryOutputWriterV1.cs
- Tokenizer.cs
- DeviceContext.cs
- DeflateInput.cs
- ConfigXmlComment.cs
- XmlDocumentViewSchema.cs
- TreeView.cs
- StyleTypedPropertyAttribute.cs
- ViewGenResults.cs
- ItemCollection.cs
- SeparatorAutomationPeer.cs
- RegistryConfigurationProvider.cs
- SqlGenerator.cs
- Dynamic.cs
- GradientPanel.cs
- Brushes.cs
- SHA384Managed.cs
- PrivateFontCollection.cs
- FileAuthorizationModule.cs
- _HeaderInfo.cs
- ShapeTypeface.cs
- NoClickablePointException.cs
- NativeMethods.cs
- FontEmbeddingManager.cs
- TableRowGroup.cs
- Camera.cs
- WindowsIPAddress.cs
- Vector3DAnimation.cs
- EventLogTraceListener.cs
- followingquery.cs
- UIElement.cs
- AsyncResult.cs
- DataBoundControl.cs
- WithParamAction.cs
- AliasExpr.cs
- GridViewColumnHeader.cs
- BufferedGraphicsManager.cs
- InputLanguageCollection.cs
- ContactManager.cs
- LogEntryHeaderSerializer.cs
- CompositeActivityDesigner.cs
- GPRECT.cs
- HttpGetProtocolReflector.cs
- ContentType.cs
- ConfigXmlSignificantWhitespace.cs
- CachedTypeface.cs
- InputScopeAttribute.cs
- AmbientProperties.cs
- HandlerBase.cs
- SplashScreen.cs
- LongCountAggregationOperator.cs
- ProcessMonitor.cs
- XmlUnspecifiedAttribute.cs
- DataRowChangeEvent.cs
- XmlElementAttributes.cs
- ScrollChrome.cs
- XhtmlBasicValidatorAdapter.cs
- smtppermission.cs
- CacheOutputQuery.cs
- AutomationPropertyInfo.cs
- ExpressionBuilder.cs
- sapiproxy.cs
- NamespaceEmitter.cs
- MetadataExchangeClient.cs
- PrePostDescendentsWalker.cs