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
- ICollection.cs
- GradientStopCollection.cs
- DataTableExtensions.cs
- OrderedDictionaryStateHelper.cs
- SwitchAttribute.cs
- PropertyChangedEventManager.cs
- newinstructionaction.cs
- AppDomainManager.cs
- SHA512CryptoServiceProvider.cs
- SemanticTag.cs
- UrlEncodedParameterWriter.cs
- TypeBuilder.cs
- Module.cs
- WSSecurityOneDotOneReceiveSecurityHeader.cs
- isolationinterop.cs
- PropertyEmitterBase.cs
- Model3D.cs
- XmlAttributeOverrides.cs
- PageTheme.cs
- DefaultAuthorizationContext.cs
- RSAPKCS1SignatureFormatter.cs
- TraceSwitch.cs
- ValidatingReaderNodeData.cs
- TypeUnloadedException.cs
- ValueExpressions.cs
- QueryCursorEventArgs.cs
- ModelChangedEventArgsImpl.cs
- WsdlBuildProvider.cs
- EntityConnection.cs
- ByteStorage.cs
- ObjectReaderCompiler.cs
- RIPEMD160.cs
- XPathArrayIterator.cs
- ReliabilityContractAttribute.cs
- IDReferencePropertyAttribute.cs
- NavigationWindow.cs
- filewebrequest.cs
- ManipulationStartedEventArgs.cs
- SQLString.cs
- DefaultPrintController.cs
- NewExpression.cs
- SQLChars.cs
- Number.cs
- Trace.cs
- TextUtf8RawTextWriter.cs
- UIntPtr.cs
- FieldInfo.cs
- FirstMatchCodeGroup.cs
- AutomationPropertyInfo.cs
- ReflectPropertyDescriptor.cs
- ClientRuntimeConfig.cs
- Point3DValueSerializer.cs
- SyntaxCheck.cs
- HighlightComponent.cs
- FileSystemWatcher.cs
- CurrentChangingEventManager.cs
- ControlType.cs
- ActivationService.cs
- SchemaCompiler.cs
- AutoSizeToolBoxItem.cs
- Padding.cs
- DataGridColumnCollection.cs
- WebPartMovingEventArgs.cs
- FixedSOMGroup.cs
- URLIdentityPermission.cs
- BitmapEffectGeneralTransform.cs
- NullableBoolConverter.cs
- InternalMappingException.cs
- FactoryRecord.cs
- SessionPageStateSection.cs
- ProcessHost.cs
- TraceSection.cs
- SerTrace.cs
- EnvelopedPkcs7.cs
- _Rfc2616CacheValidators.cs
- WebControl.cs
- SystemGatewayIPAddressInformation.cs
- _DynamicWinsockMethods.cs
- RuleConditionDialog.Designer.cs
- TextCollapsingProperties.cs
- ToolBarButtonDesigner.cs
- LoginCancelEventArgs.cs
- ProviderIncompatibleException.cs
- QilGenerator.cs
- OleCmdHelper.cs
- HMACSHA256.cs
- ConstructorNeedsTagAttribute.cs
- CompModSwitches.cs
- StorageEndPropertyMapping.cs
- RuleSettings.cs
- ComboBox.cs
- CounterSet.cs
- QueueException.cs
- DomainUpDown.cs
- Accessors.cs
- StorageBasedPackageProperties.cs
- BlurEffect.cs
- DirectoryObjectSecurity.cs
- WindowsGraphicsCacheManager.cs
- EventManager.cs