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
- GridViewPageEventArgs.cs
- TabItem.cs
- SafeThreadHandle.cs
- TypeDescriptionProviderAttribute.cs
- CodeTypeDelegate.cs
- ListenerBinder.cs
- SoapIncludeAttribute.cs
- WSHttpBinding.cs
- Help.cs
- ModelUIElement3D.cs
- Funcletizer.cs
- TrustLevelCollection.cs
- ValidatorAttribute.cs
- EditorResources.cs
- InvalidFilterCriteriaException.cs
- MemoryPressure.cs
- ControlOperationBehavior.cs
- followingsibling.cs
- Crypto.cs
- RequestQueryParser.cs
- ContextMenu.cs
- ViewStateException.cs
- ASCIIEncoding.cs
- DBConnection.cs
- IPGlobalProperties.cs
- PassportAuthenticationModule.cs
- RawStylusActions.cs
- PerformanceCounterTraceRecord.cs
- XslTransformFileEditor.cs
- SerTrace.cs
- ClientSettingsProvider.cs
- StylusButton.cs
- XmlBoundElement.cs
- ResourcesGenerator.cs
- TabControl.cs
- MemoryRecordBuffer.cs
- DataContractSerializer.cs
- SessionIDManager.cs
- Point3DAnimation.cs
- InvalidDocumentContentsException.cs
- SessionEndedEventArgs.cs
- AppDomainCompilerProxy.cs
- ScriptBehaviorDescriptor.cs
- SafeNativeMethods.cs
- HtmlInputImage.cs
- CodeTypeConstructor.cs
- Pens.cs
- shaper.cs
- TiffBitmapDecoder.cs
- HMACMD5.cs
- XmlSchemaImport.cs
- ReferencedType.cs
- DBConnectionString.cs
- SetIterators.cs
- Lease.cs
- TextBoxAutomationPeer.cs
- XmlSchemaAttributeGroup.cs
- Vector3DAnimationUsingKeyFrames.cs
- QuadraticBezierSegment.cs
- PrintPreviewDialog.cs
- XmlBinaryReader.cs
- LinkedResourceCollection.cs
- AllMembershipCondition.cs
- HtmlInputControl.cs
- EventLogTraceListener.cs
- COAUTHINFO.cs
- RequestQueue.cs
- EDesignUtil.cs
- ParameterBuilder.cs
- PrintDialog.cs
- DistributedTransactionPermission.cs
- CheckBoxRenderer.cs
- TdsParserHelperClasses.cs
- MetadataCollection.cs
- WsatServiceAddress.cs
- TypeCollectionPropertyEditor.cs
- BasicHttpSecurityMode.cs
- PaintEvent.cs
- BinaryNode.cs
- ResourceProviderFactory.cs
- SystemThemeKey.cs
- HighlightComponent.cs
- GeneralTransform3D.cs
- ListBindingConverter.cs
- RequestCache.cs
- TypeUtil.cs
- RelationshipNavigation.cs
- ValidationEventArgs.cs
- ImageEditor.cs
- AppSettingsReader.cs
- SqlIdentifier.cs
- WorkflowMarkupSerializationProvider.cs
- DataTablePropertyDescriptor.cs
- ServiceHostingEnvironment.cs
- BooleanStorage.cs
- SqlNotificationRequest.cs
- MetadataArtifactLoaderComposite.cs
- FastPropertyAccessor.cs
- ObjectMaterializedEventArgs.cs
- OLEDB_Util.cs