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
- MailAddressCollection.cs
- PinnedBufferMemoryStream.cs
- SecurityException.cs
- TCPClient.cs
- NullableConverter.cs
- OLEDB_Util.cs
- SuspendDesigner.cs
- FillBehavior.cs
- TraceLog.cs
- srgsitem.cs
- RpcAsyncResult.cs
- MatcherBuilder.cs
- SchemaInfo.cs
- BrowserDefinition.cs
- WindowsIdentity.cs
- XmlNodeList.cs
- EntityContainerRelationshipSet.cs
- XsdDataContractImporter.cs
- UpDownBase.cs
- ObjectConverter.cs
- PageOutputQuality.cs
- XmlSchemaAnyAttribute.cs
- ValidationSummary.cs
- TableRowGroup.cs
- SkinBuilder.cs
- VersionConverter.cs
- AutoSizeToolBoxItem.cs
- GeneralTransform2DTo3DTo2D.cs
- HtmlHistory.cs
- CheckBoxPopupAdapter.cs
- RoleGroup.cs
- LoginCancelEventArgs.cs
- CompilationUtil.cs
- ObjectDataSourceStatusEventArgs.cs
- RectangleGeometry.cs
- SoundPlayerAction.cs
- DataBindingCollection.cs
- SemaphoreSecurity.cs
- FilteredReadOnlyMetadataCollection.cs
- PropertyCondition.cs
- EnumerableRowCollectionExtensions.cs
- ReadWriteSpinLock.cs
- XmlSignatureProperties.cs
- StorageModelBuildProvider.cs
- XPathExpr.cs
- DataServiceClientException.cs
- EditingCommands.cs
- ClientConfigurationHost.cs
- QilXmlReader.cs
- RecordManager.cs
- CngAlgorithmGroup.cs
- DataKeyCollection.cs
- EntryWrittenEventArgs.cs
- ButtonAutomationPeer.cs
- BlurEffect.cs
- BaseTemplateBuildProvider.cs
- ActivityTypeDesigner.xaml.cs
- PasswordRecovery.cs
- xamlnodes.cs
- ResourceExpressionBuilder.cs
- HttpListenerRequestUriBuilder.cs
- FixUp.cs
- Win32SafeHandles.cs
- FormViewRow.cs
- GetFileNameResult.cs
- XsltLibrary.cs
- AssociatedControlConverter.cs
- MenuItemBinding.cs
- DefaultBindingPropertyAttribute.cs
- TileBrush.cs
- x509utils.cs
- TranslateTransform.cs
- MarkupProperty.cs
- XmlDictionaryWriter.cs
- SqlConnectionString.cs
- LayoutTableCell.cs
- WeakEventManager.cs
- WindowsSysHeader.cs
- WindowsRichEditRange.cs
- PathData.cs
- DataTable.cs
- ImportCatalogPart.cs
- ControlOperationInvoker.cs
- JsonWriter.cs
- Internal.cs
- UriTemplateVariablePathSegment.cs
- SingleAnimation.cs
- RbTree.cs
- PackageProperties.cs
- Events.cs
- ExtendedPropertyDescriptor.cs
- HierarchicalDataBoundControl.cs
- _UriSyntax.cs
- HtmlTernaryTree.cs
- Int16Storage.cs
- PolicyStatement.cs
- SqlDataRecord.cs
- ProxyElement.cs
- RecordConverter.cs
- ScrollContentPresenter.cs