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
- TextPointerBase.cs
- SHA1Managed.cs
- FrameSecurityDescriptor.cs
- BindToObject.cs
- KnownBoxes.cs
- DataKey.cs
- CustomSignedXml.cs
- TdsParameterSetter.cs
- XmlSchemaValidationException.cs
- UpdateCompiler.cs
- SpecialNameAttribute.cs
- DesigntimeLicenseContextSerializer.cs
- CompiledQuery.cs
- SQLDateTime.cs
- ForeignConstraint.cs
- SourceFileBuildProvider.cs
- GraphicsPathIterator.cs
- NativeRecognizer.cs
- ToolStripGripRenderEventArgs.cs
- CodeArrayCreateExpression.cs
- HttpCacheParams.cs
- Menu.cs
- Decimal.cs
- sqlcontext.cs
- RegexParser.cs
- ContentElementAutomationPeer.cs
- BaseCAMarshaler.cs
- DataGridViewSortCompareEventArgs.cs
- InkCollectionBehavior.cs
- DataListItem.cs
- CodeMemberField.cs
- HtmlInputText.cs
- UnsafeNativeMethods.cs
- HTTPNotFoundHandler.cs
- XPathException.cs
- Application.cs
- RightNameExpirationInfoPair.cs
- EventManager.cs
- TextDecorationCollection.cs
- JapaneseCalendar.cs
- EventWaitHandle.cs
- DeviceContexts.cs
- Win32MouseDevice.cs
- ByteAnimation.cs
- DataGridViewRowHeightInfoPushedEventArgs.cs
- TextTrailingWordEllipsis.cs
- NetworkCredential.cs
- Merger.cs
- DataViewSetting.cs
- ViewStateException.cs
- DiscoveryClientReferences.cs
- ValidationRule.cs
- GC.cs
- ScopeCompiler.cs
- HttpPostedFile.cs
- XamlSerializerUtil.cs
- RequestSecurityTokenResponse.cs
- TrackPointCollection.cs
- RoamingStoreFile.cs
- ISFTagAndGuidCache.cs
- PageThemeCodeDomTreeGenerator.cs
- PngBitmapEncoder.cs
- Console.cs
- CompositeActivityMarkupSerializer.cs
- DbgUtil.cs
- Main.cs
- EventProviderWriter.cs
- RealizationDrawingContextWalker.cs
- DesignerDataView.cs
- SafeNativeMethodsOther.cs
- PathBox.cs
- ContentElement.cs
- WebControlAdapter.cs
- selecteditemcollection.cs
- PreviewPrintController.cs
- StateWorkerRequest.cs
- DragEventArgs.cs
- SoapTypeAttribute.cs
- VisualBrush.cs
- errorpatternmatcher.cs
- OuterGlowBitmapEffect.cs
- DispatcherObject.cs
- BitmapEffectDrawing.cs
- FixedSOMPageElement.cs
- AuthStoreRoleProvider.cs
- ExecutionContext.cs
- HttpCapabilitiesEvaluator.cs
- SplashScreenNativeMethods.cs
- UnsafeNativeMethods.cs
- DataGridViewIntLinkedList.cs
- UnsafeNativeMethods.cs
- CachingHintValidation.cs
- InheritanceContextChangedEventManager.cs
- StringUtil.cs
- XmlSchemaElement.cs
- NamedPipeAppDomainProtocolHandler.cs
- SkewTransform.cs
- TraceHwndHost.cs
- TextEditorTables.cs
- ClientSponsor.cs