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
- ApplicationException.cs
- ModelTypeConverter.cs
- SendActivityDesigner.cs
- WorkflowMessageEventArgs.cs
- WindowsListViewGroup.cs
- TemplateControlParser.cs
- AppSettingsExpressionBuilder.cs
- XmlElementAttribute.cs
- Exceptions.cs
- Point4D.cs
- DescendantOverDescendantQuery.cs
- UnsafeNativeMethods.cs
- SequentialUshortCollection.cs
- DrawingAttributes.cs
- ToolstripProfessionalRenderer.cs
- RegexCapture.cs
- HostVisual.cs
- CodeAttributeDeclaration.cs
- HttpHandler.cs
- HttpCachePolicyElement.cs
- TraceRecord.cs
- listitem.cs
- SourceElementsCollection.cs
- ChildChangedEventArgs.cs
- DataServices.cs
- Subset.cs
- AssertFilter.cs
- PropertyFilterAttribute.cs
- MulticastIPAddressInformationCollection.cs
- SchemaInfo.cs
- AssociationSet.cs
- HScrollBar.cs
- XsdBuilder.cs
- RegexCharClass.cs
- Soap.cs
- FontUnitConverter.cs
- WebExceptionStatus.cs
- GestureRecognizer.cs
- DefaultAsyncDataDispatcher.cs
- DocumentPageView.cs
- Types.cs
- BitmapCodecInfo.cs
- Variant.cs
- AspProxy.cs
- Brush.cs
- ForEachAction.cs
- WebPartsPersonalization.cs
- EndpointIdentityExtension.cs
- NavigatingCancelEventArgs.cs
- Automation.cs
- ColorTranslator.cs
- AnimatedTypeHelpers.cs
- SecurityPolicySection.cs
- CalendarModeChangedEventArgs.cs
- OpenFileDialog.cs
- ReadOnlyCollectionBase.cs
- PropagatorResult.cs
- GenericsInstances.cs
- CommonObjectSecurity.cs
- DateTimeOffset.cs
- DataGridViewLinkColumn.cs
- ValidatedMobileControlConverter.cs
- RoleService.cs
- FlowPosition.cs
- ExtenderControl.cs
- Exceptions.cs
- TranslateTransform3D.cs
- StorageAssociationSetMapping.cs
- MappingItemCollection.cs
- Internal.cs
- SmtpFailedRecipientException.cs
- HashCodeCombiner.cs
- TransactionBridgeSection.cs
- ReadOnlyHierarchicalDataSourceView.cs
- BitmapEffectCollection.cs
- PropertySet.cs
- AliasedSlot.cs
- ToolStripSeparator.cs
- StatusBarPanelClickEvent.cs
- CounterCreationData.cs
- CachedRequestParams.cs
- StreamGeometry.cs
- IssuedTokensHeader.cs
- Ports.cs
- Point3DValueSerializer.cs
- ReadOnlyHierarchicalDataSource.cs
- TextBoxAutomationPeer.cs
- ContextMenu.cs
- HttpCookie.cs
- CommonRemoteMemoryBlock.cs
- FileStream.cs
- DesignerDataParameter.cs
- Processor.cs
- PersonalizablePropertyEntry.cs
- FormatterServices.cs
- ListViewInsertedEventArgs.cs
- SingleStorage.cs
- WebPartTracker.cs
- OdbcConnectionString.cs
- CopyNodeSetAction.cs