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
- TabControl.cs
- FileDialog.cs
- HitTestParameters.cs
- HtmlButton.cs
- TrackingServices.cs
- ComboBoxRenderer.cs
- CodeParameterDeclarationExpression.cs
- RemoteCryptoRsaServiceProvider.cs
- MaskedTextProvider.cs
- DataGridTextBoxColumn.cs
- RuntimeCompatibilityAttribute.cs
- StoreAnnotationsMap.cs
- SecuritySessionFilter.cs
- TreeNodeBinding.cs
- JsonReader.cs
- IdentityReference.cs
- PlatformNotSupportedException.cs
- TextAction.cs
- ClassDataContract.cs
- MissingManifestResourceException.cs
- CodeGotoStatement.cs
- PermissionSetTriple.cs
- DataGridViewSortCompareEventArgs.cs
- FixedBufferAttribute.cs
- CacheRequest.cs
- KnownBoxes.cs
- HtmlInputCheckBox.cs
- SafeNativeHandle.cs
- IdentityHolder.cs
- ValueUnavailableException.cs
- LingerOption.cs
- BigInt.cs
- Pair.cs
- ExpandCollapseProviderWrapper.cs
- ContextMarshalException.cs
- Animatable.cs
- UserControlCodeDomTreeGenerator.cs
- TreeNodeCollection.cs
- NativeActivityMetadata.cs
- TraceLog.cs
- WeakReadOnlyCollection.cs
- WebPartActionVerb.cs
- Utility.cs
- HttpBrowserCapabilitiesWrapper.cs
- LoginName.cs
- SubpageParaClient.cs
- DynamicILGenerator.cs
- Missing.cs
- QilUnary.cs
- QuaternionRotation3D.cs
- SamlAudienceRestrictionCondition.cs
- ContextDataSource.cs
- AbandonedMutexException.cs
- SchemaImporterExtensionElement.cs
- Animatable.cs
- SimpleApplicationHost.cs
- EventManager.cs
- PriorityItem.cs
- Enum.cs
- ListSortDescription.cs
- FilterQuery.cs
- CryptoKeySecurity.cs
- Mutex.cs
- MultipartContentParser.cs
- CodeVariableReferenceExpression.cs
- SymbolType.cs
- XsltFunctions.cs
- ISAPIRuntime.cs
- UnsafeNativeMethods.cs
- SAPIEngineTypes.cs
- FolderLevelBuildProviderAppliesToAttribute.cs
- TerminatorSinks.cs
- SystemIcmpV6Statistics.cs
- WebBrowser.cs
- SettingsAttributes.cs
- FileClassifier.cs
- ScrollItemPattern.cs
- ConditionalDesigner.cs
- Delay.cs
- MsmqChannelFactory.cs
- FamilyMapCollection.cs
- PropertyDescriptorCollection.cs
- FieldToken.cs
- ACE.cs
- ControlCachePolicy.cs
- SynchronizedDispatch.cs
- TableTextElementCollectionInternal.cs
- RSAOAEPKeyExchangeDeformatter.cs
- NullableDoubleAverageAggregationOperator.cs
- ContentPlaceHolder.cs
- ListViewHitTestInfo.cs
- Rijndael.cs
- RegistryPermission.cs
- DeclarationUpdate.cs
- ImageSource.cs
- HandledEventArgs.cs
- DesignerAdapterUtil.cs
- SharedDp.cs
- SchemaNamespaceManager.cs
- IItemProperties.cs