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
- _ContextAwareResult.cs
- EventManager.cs
- ScrollEvent.cs
- InvalidEnumArgumentException.cs
- ControlBuilder.cs
- SmiEventSink_DeferedProcessing.cs
- DragEventArgs.cs
- PersistChildrenAttribute.cs
- ScriptRegistrationManager.cs
- AdRotatorDesigner.cs
- XmlSchemaDatatype.cs
- HandlerFactoryWrapper.cs
- Line.cs
- ProfilePropertyNameValidator.cs
- PermissionSet.cs
- EventBuilder.cs
- SimpleWorkerRequest.cs
- PageCanvasSize.cs
- UseAttributeSetsAction.cs
- MessageHeaderException.cs
- SymbolMethod.cs
- PropertyPath.cs
- NoResizeHandleGlyph.cs
- CheckBoxBaseAdapter.cs
- MdiWindowListStrip.cs
- DynamicValidatorEventArgs.cs
- ListControl.cs
- CFStream.cs
- MultiDataTrigger.cs
- RectValueSerializer.cs
- WebPartVerbsEventArgs.cs
- DesigntimeLicenseContextSerializer.cs
- AuthenticationModulesSection.cs
- DataBindingCollectionConverter.cs
- GregorianCalendarHelper.cs
- _HeaderInfo.cs
- EventEntry.cs
- CodeGenHelper.cs
- SafeRightsManagementQueryHandle.cs
- DataGridViewCellConverter.cs
- PopupRootAutomationPeer.cs
- SqlBuffer.cs
- CSharpCodeProvider.cs
- UnmanagedMarshal.cs
- InvokePattern.cs
- LicenseProviderAttribute.cs
- DataConnectionHelper.cs
- EdmType.cs
- Context.cs
- Zone.cs
- AnnotationMap.cs
- WindowsHyperlink.cs
- input.cs
- Emitter.cs
- Route.cs
- WindowsSecurityToken.cs
- webproxy.cs
- BitmapScalingModeValidation.cs
- DoubleAnimationClockResource.cs
- BulletDecorator.cs
- DesignTimeParseData.cs
- SecondaryIndexList.cs
- TimelineGroup.cs
- PreservationFileWriter.cs
- DiffuseMaterial.cs
- BaseComponentEditor.cs
- JsonObjectDataContract.cs
- wmiutil.cs
- WindowPatternIdentifiers.cs
- TemplatePropertyEntry.cs
- DataBoundControlHelper.cs
- LogEntryHeaderv1Deserializer.cs
- HierarchicalDataBoundControlAdapter.cs
- FontConverter.cs
- Rotation3D.cs
- COM2FontConverter.cs
- _ContextAwareResult.cs
- XmlUnspecifiedAttribute.cs
- CompilationRelaxations.cs
- SplashScreenNativeMethods.cs
- ProfileSettings.cs
- AspCompat.cs
- InstancePersistenceException.cs
- RegionData.cs
- QilReplaceVisitor.cs
- Content.cs
- DynamicMethod.cs
- ValidationResult.cs
- SmiConnection.cs
- FontCacheLogic.cs
- TransformerInfo.cs
- QilInvokeEarlyBound.cs
- DataGridViewSortCompareEventArgs.cs
- DataControlCommands.cs
- CubicEase.cs
- GeneralTransform3DCollection.cs
- COM2ColorConverter.cs
- controlskin.cs
- FontStyle.cs
- QilInvokeLateBound.cs