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
- DESCryptoServiceProvider.cs
- FontDialog.cs
- XmlUTF8TextReader.cs
- DecoratedNameAttribute.cs
- WindowsTokenRoleProvider.cs
- Closure.cs
- HyperLinkColumn.cs
- GridPattern.cs
- Adorner.cs
- QueryPageSettingsEventArgs.cs
- RefType.cs
- NullEntityWrapper.cs
- StylusDevice.cs
- LambdaCompiler.Logical.cs
- DefaultAsyncDataDispatcher.cs
- Dispatcher.cs
- SqlUDTStorage.cs
- GacUtil.cs
- BamlReader.cs
- BaseCAMarshaler.cs
- DataSvcMapFile.cs
- HotSpot.cs
- DataQuery.cs
- _NestedMultipleAsyncResult.cs
- StreamAsIStream.cs
- FlagsAttribute.cs
- MemberMemberBinding.cs
- TypeConstant.cs
- BrowserCapabilitiesFactory.cs
- Int16.cs
- XPathArrayIterator.cs
- CollectionContainer.cs
- TypeDependencyAttribute.cs
- PhonemeConverter.cs
- HtmlTableCell.cs
- TransactedBatchingElement.cs
- RepeatBehavior.cs
- HMAC.cs
- TiffBitmapEncoder.cs
- ResourceWriter.cs
- ServerIdentity.cs
- XmlSiteMapProvider.cs
- OutputScopeManager.cs
- MediaContext.cs
- XXXInfos.cs
- Tile.cs
- listitem.cs
- InvalidOleVariantTypeException.cs
- InputLangChangeRequestEvent.cs
- SerTrace.cs
- PeerObject.cs
- SafeWaitHandle.cs
- ListBindableAttribute.cs
- VirtualPathProvider.cs
- InvokeMethodActivityDesigner.cs
- RoleService.cs
- FlowNode.cs
- VerificationAttribute.cs
- AsyncOperationContext.cs
- RouteUrlExpressionBuilder.cs
- JsonObjectDataContract.cs
- _TimerThread.cs
- mediapermission.cs
- StrongTypingException.cs
- EditorPartCollection.cs
- CharEntityEncoderFallback.cs
- NameValuePermission.cs
- HwndSourceParameters.cs
- basecomparevalidator.cs
- EncryptedPackage.cs
- DataGridViewRowsRemovedEventArgs.cs
- NamespaceMapping.cs
- DesignerObject.cs
- WebConfigurationHostFileChange.cs
- ParagraphResult.cs
- XmlTypeAttribute.cs
- QueryResponse.cs
- UInt16.cs
- ConfigurationSection.cs
- HtmlElement.cs
- TrackingProfileDeserializationException.cs
- NetPeerTcpBindingCollectionElement.cs
- TypeListConverter.cs
- DoubleKeyFrameCollection.cs
- RadioButtonPopupAdapter.cs
- XmlDataProvider.cs
- HtmlToClrEventProxy.cs
- ClientTargetCollection.cs
- SubclassTypeValidatorAttribute.cs
- SemanticBasicElement.cs
- PreservationFileReader.cs
- StreamResourceInfo.cs
- TimeManager.cs
- ConnectivityStatus.cs
- Pointer.cs
- WebPartEditorOkVerb.cs
- EncoderParameters.cs
- ControlDesignerState.cs
- EmptyStringExpandableObjectConverter.cs
- FirstMatchCodeGroup.cs