Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- RegexMatchCollection.cs
- LiteralControl.cs
- tooltip.cs
- WebPartConnectVerb.cs
- DateTimeStorage.cs
- XomlCompilerParameters.cs
- DesignOnlyAttribute.cs
- PerformanceCounterTraceRecord.cs
- AttributeConverter.cs
- HitTestParameters.cs
- SafeArrayRankMismatchException.cs
- RelatedCurrencyManager.cs
- _NestedSingleAsyncResult.cs
- BroadcastEventHelper.cs
- GeometryGroup.cs
- DispatcherHooks.cs
- Button.cs
- DispatcherFrame.cs
- ReaderWriterLock.cs
- WindowsTitleBar.cs
- WebServiceEnumData.cs
- TranslateTransform3D.cs
- ApplyImportsAction.cs
- ProvidePropertyAttribute.cs
- TransformerConfigurationWizardBase.cs
- ThicknessAnimationUsingKeyFrames.cs
- SimpleNameService.cs
- FunctionDescription.cs
- BaseTemplateCodeDomTreeGenerator.cs
- CaseExpr.cs
- CheckedPointers.cs
- EditorPartChrome.cs
- WinFormsSpinner.cs
- EntityUtil.cs
- FilterElement.cs
- Condition.cs
- MenuItem.cs
- BitmapEncoder.cs
- WindowsMenu.cs
- GuidTagList.cs
- ScriptingSectionGroup.cs
- DataControlCommands.cs
- RuntimeArgumentHandle.cs
- HtmlFormParameterWriter.cs
- ViewStateModeByIdAttribute.cs
- Timer.cs
- ExeContext.cs
- CellParagraph.cs
- SupportsEventValidationAttribute.cs
- BidirectionalDictionary.cs
- EmptyTextWriter.cs
- Size.cs
- SchemaCreator.cs
- SafeNativeMethods.cs
- XPathException.cs
- UrlEncodedParameterWriter.cs
- DocumentPageView.cs
- XamlClipboardData.cs
- embossbitmapeffect.cs
- DesignerLoader.cs
- HierarchicalDataSourceControl.cs
- DeflateStream.cs
- ParserStack.cs
- ReadOnlyDictionary.cs
- XmlSchemaSimpleTypeUnion.cs
- DataGridColumnReorderingEventArgs.cs
- BamlVersionHeader.cs
- PhysicalAddress.cs
- MetadataSerializer.cs
- SR.cs
- SingleConverter.cs
- BitmapEffectInput.cs
- RequestTimeoutManager.cs
- RegexFCD.cs
- AutoResizedEvent.cs
- SpecialNameAttribute.cs
- HttpVersion.cs
- SslStreamSecurityElement.cs
- UnsafeNativeMethods.cs
- AuthenticationModuleElementCollection.cs
- UnsafeMethods.cs
- EventLogPermissionEntry.cs
- DataSourceSelectArguments.cs
- TrackBar.cs
- CodeParameterDeclarationExpression.cs
- CodeCompileUnit.cs
- CheckedListBox.cs
- RSAOAEPKeyExchangeDeformatter.cs
- ServiceMoniker.cs
- Funcletizer.cs
- ViewDesigner.cs
- AccessDataSource.cs
- Claim.cs
- FileUtil.cs
- WindowsProgressbar.cs
- Blend.cs
- WebPartActionVerb.cs
- ShaperBuffers.cs
- IImplicitResourceProvider.cs
- DataGridViewColumnEventArgs.cs