Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Metadata / Edm / FacetValueContainer.cs / 1305376 / FacetValueContainer.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- 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 [....] // @backupOwner [....] //--------------------------------------------------------------------- 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
- CacheSection.cs
- CircleEase.cs
- ObjectPropertyMapping.cs
- FontStyleConverter.cs
- WebPartConnectionsEventArgs.cs
- DateTimeConverter2.cs
- QilFunction.cs
- WindowsSspiNegotiation.cs
- AvtEvent.cs
- DateBoldEvent.cs
- Assembly.cs
- Wizard.cs
- WebServiceErrorEvent.cs
- FixedSOMTextRun.cs
- BasicCellRelation.cs
- sqlnorm.cs
- Pen.cs
- CompiledELinqQueryState.cs
- QueryHandler.cs
- XmlWriterSettings.cs
- StylusButtonCollection.cs
- ServerType.cs
- WebPartsPersonalization.cs
- RelationshipDetailsRow.cs
- RelatedView.cs
- SqlException.cs
- WithStatement.cs
- XamlReaderHelper.cs
- LiteralControl.cs
- SqlTypesSchemaImporter.cs
- CheckBox.cs
- LiteralSubsegment.cs
- LineUtil.cs
- PointCollectionValueSerializer.cs
- DocumentOrderComparer.cs
- ImageCollectionEditor.cs
- ExpandedWrapper.cs
- x509store.cs
- MultiBindingExpression.cs
- EntityDataSourceEntitySetNameItem.cs
- EntityDataSourceQueryBuilder.cs
- CookieHandler.cs
- PasswordTextContainer.cs
- SelectionItemProviderWrapper.cs
- PageCatalogPart.cs
- ResourcePermissionBaseEntry.cs
- AccessDataSourceView.cs
- ToolStripItemCollection.cs
- CultureInfoConverter.cs
- WebBrowsableAttribute.cs
- CopyOfAction.cs
- ThreadAttributes.cs
- DictionaryEntry.cs
- CreateRefExpr.cs
- ModelFactory.cs
- BamlRecordReader.cs
- RichTextBox.cs
- ExtenderProviderService.cs
- IsolatedStorageFileStream.cs
- ClaimTypes.cs
- AssemblyCache.cs
- SoundPlayer.cs
- EncoderExceptionFallback.cs
- PreviewPrintController.cs
- TextStore.cs
- CurrencyWrapper.cs
- SmiContext.cs
- FastEncoderWindow.cs
- HttpValueCollection.cs
- ThumbAutomationPeer.cs
- XAMLParseException.cs
- AsmxEndpointPickerExtension.cs
- Slider.cs
- XpsThumbnail.cs
- Regex.cs
- ConnectionStringSettingsCollection.cs
- login.cs
- Overlapped.cs
- RegistryConfigurationProvider.cs
- SiteMapHierarchicalDataSourceView.cs
- WebHostScriptMappingsInstallComponent.cs
- MsdtcClusterUtils.cs
- PatternMatcher.cs
- BamlLocalizableResourceKey.cs
- KeysConverter.cs
- CLSCompliantAttribute.cs
- LinqDataSourceHelper.cs
- ObjectDataSourceDisposingEventArgs.cs
- DynamicDataManager.cs
- IChannel.cs
- Quaternion.cs
- DbModificationCommandTree.cs
- BindStream.cs
- ProcessHostServerConfig.cs
- RC2.cs
- FocusTracker.cs
- CodeTryCatchFinallyStatement.cs
- COM2ComponentEditor.cs
- WebServicesSection.cs
- HttpRuntimeSection.cs