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
- ChangeTracker.cs
- DependencyObject.cs
- ComponentResourceManager.cs
- Stackframe.cs
- SpeechUI.cs
- EndpointDispatcherTable.cs
- TextEditor.cs
- TextTreeExtractElementUndoUnit.cs
- DSASignatureFormatter.cs
- WindowsSecurityToken.cs
- Propagator.Evaluator.cs
- EventBuilder.cs
- Rectangle.cs
- SqlGatherConsumedAliases.cs
- SqlTrackingQuery.cs
- QueryConverter.cs
- DeadCharTextComposition.cs
- UpdatePanelTriggerCollection.cs
- OdbcConnectionFactory.cs
- Condition.cs
- PolyQuadraticBezierSegment.cs
- TabPageDesigner.cs
- CompositionAdorner.cs
- BindableTemplateBuilder.cs
- TagNameToTypeMapper.cs
- Task.cs
- InsufficientExecutionStackException.cs
- DispatcherExceptionEventArgs.cs
- __Filters.cs
- ModuleBuilder.cs
- XmlSchemaComplexContentExtension.cs
- GraphicsContainer.cs
- BinaryObjectWriter.cs
- HtmlInputReset.cs
- keycontainerpermission.cs
- PatternMatcher.cs
- DoubleStorage.cs
- WindowsListViewItemCheckBox.cs
- ComplusTypeValidator.cs
- XPathDocument.cs
- XmlCDATASection.cs
- StartUpEventArgs.cs
- ImageListUtils.cs
- FormattedText.cs
- VarRemapper.cs
- Shared.cs
- TreeViewItem.cs
- xamlnodes.cs
- HttpGetProtocolImporter.cs
- TagMapInfo.cs
- Query.cs
- EnterpriseServicesHelper.cs
- BaseAutoFormat.cs
- WebEventTraceProvider.cs
- Transform.cs
- PropertyRef.cs
- RuleRef.cs
- SqlRowUpdatingEvent.cs
- Converter.cs
- FontCollection.cs
- SettingsAttributeDictionary.cs
- RadioButtonFlatAdapter.cs
- wgx_render.cs
- VirtualizingStackPanel.cs
- ProcessHostFactoryHelper.cs
- XmlNullResolver.cs
- Drawing.cs
- SingleStorage.cs
- Menu.cs
- MappingSource.cs
- ConnectionInterfaceCollection.cs
- ScriptMethodAttribute.cs
- ObjectQuery.cs
- WebPartEditorCancelVerb.cs
- HtmlControl.cs
- BindingsCollection.cs
- ComboBoxAutomationPeer.cs
- CorrelationManager.cs
- WmlImageAdapter.cs
- TextEmbeddedObject.cs
- CompiledXpathExpr.cs
- WebReferencesBuildProvider.cs
- XmlDictionary.cs
- ResourceReferenceExpression.cs
- Converter.cs
- IIS7WorkerRequest.cs
- DragDrop.cs
- SelectionPattern.cs
- ApplicationException.cs
- DataGridViewCellValueEventArgs.cs
- ViewUtilities.cs
- GiveFeedbackEvent.cs
- StrongNameUtility.cs
- HttpRuntimeSection.cs
- PathFigureCollectionConverter.cs
- ReadOnlyDataSourceView.cs
- HtmlElementErrorEventArgs.cs
- TypeBrowserDialog.cs
- ResourceProviderFactory.cs
- AuthorizationRule.cs