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
- CheckBox.cs
- PopupRootAutomationPeer.cs
- DataColumnMappingCollection.cs
- FrameworkContentElement.cs
- BinaryFormatterWriter.cs
- CodeMemberEvent.cs
- DynamicDocumentPaginator.cs
- AsyncOperationManager.cs
- TrackingSection.cs
- AspProxy.cs
- WebConfigurationFileMap.cs
- ColorContext.cs
- BamlRecordHelper.cs
- NameSpaceExtractor.cs
- TaskFormBase.cs
- Point3DKeyFrameCollection.cs
- smtpconnection.cs
- EditorZoneAutoFormat.cs
- XamlContextStack.cs
- OwnerDrawPropertyBag.cs
- DBParameter.cs
- XhtmlCssHandler.cs
- ExceptionHandler.cs
- ExpressionBuilder.cs
- TextServicesProperty.cs
- PointHitTestParameters.cs
- ClientSession.cs
- MergeLocalizationDirectives.cs
- CompositeFontInfo.cs
- UseLicense.cs
- FastEncoderStatics.cs
- Freezable.cs
- SystemNetworkInterface.cs
- PropertyDescriptor.cs
- DateTimeValueSerializer.cs
- DefaultTraceListener.cs
- BuiltInExpr.cs
- ConfigurationCollectionAttribute.cs
- XmlSchemaParticle.cs
- StringUtil.cs
- MetadataProperty.cs
- PkcsUtils.cs
- WebPartExportVerb.cs
- CompiledQuery.cs
- DataReceivedEventArgs.cs
- EditorZoneBase.cs
- FieldMetadata.cs
- messageonlyhwndwrapper.cs
- TextEditorDragDrop.cs
- WSDualHttpSecurity.cs
- webclient.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- PopupEventArgs.cs
- NumberSubstitution.cs
- EventTrigger.cs
- XmlSchemaGroupRef.cs
- TypedElement.cs
- MarshalByRefObject.cs
- VoiceSynthesis.cs
- TemplatedControlDesigner.cs
- TreeWalkHelper.cs
- ApplicationServiceManager.cs
- ToolStripSeparator.cs
- ParameterToken.cs
- _AutoWebProxyScriptHelper.cs
- Icon.cs
- ButtonChrome.cs
- TileBrush.cs
- BaseDataListActionList.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- CodeChecksumPragma.cs
- CanExpandCollapseAllConverter.cs
- XmlSchemaNotation.cs
- GenericUI.cs
- VirtualizingPanel.cs
- AppDomainProtocolHandler.cs
- CodeVariableDeclarationStatement.cs
- CheckBoxBaseAdapter.cs
- figurelengthconverter.cs
- DropShadowBitmapEffect.cs
- ProtocolInformationWriter.cs
- IsolatedStoragePermission.cs
- NativeConfigurationLoader.cs
- SqlDataSourceCache.cs
- WindowsFormsHelpers.cs
- TargetInvocationException.cs
- MembershipPasswordException.cs
- IISUnsafeMethods.cs
- StackOverflowException.cs
- FieldNameLookup.cs
- FileChangesMonitor.cs
- SHA1CryptoServiceProvider.cs
- DbModificationCommandTree.cs
- DependencyPropertyConverter.cs
- TdsParserStateObject.cs
- WindowsTokenRoleProvider.cs
- TemplateFactory.cs
- InputMethod.cs
- NetworkAddressChange.cs
- TextElement.cs