Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TitleStyle.cs
- ApplicationBuildProvider.cs
- MaterialGroup.cs
- ContextMenu.cs
- MenuAutomationPeer.cs
- EventMappingSettings.cs
- FilterQueryOptionExpression.cs
- XmlCharType.cs
- Stack.cs
- _AutoWebProxyScriptWrapper.cs
- StandardCommands.cs
- StringBuilder.cs
- ApplicationManager.cs
- VirtualDirectoryMapping.cs
- MatrixIndependentAnimationStorage.cs
- MetafileHeaderWmf.cs
- ListItemConverter.cs
- BaseConfigurationRecord.cs
- TimeZone.cs
- HttpPostServerProtocol.cs
- SHA384.cs
- SetStoryboardSpeedRatio.cs
- WindowsListViewGroupHelper.cs
- EventBookmark.cs
- HostExecutionContextManager.cs
- OleDbException.cs
- WaitHandle.cs
- Event.cs
- PromptStyle.cs
- TempFiles.cs
- DisplayInformation.cs
- Invariant.cs
- FontCacheUtil.cs
- documentsequencetextpointer.cs
- Gdiplus.cs
- ListContractAdapter.cs
- PageParserFilter.cs
- ApplicationManager.cs
- SqlPersonalizationProvider.cs
- InputScopeConverter.cs
- SpeechSynthesizer.cs
- StrokeFIndices.cs
- UpdatePanelTrigger.cs
- SortFieldComparer.cs
- TemplateGroupCollection.cs
- MouseGesture.cs
- Constraint.cs
- BamlTreeUpdater.cs
- UInt32Converter.cs
- List.cs
- DesignerFrame.cs
- ProtocolsConfigurationEntry.cs
- GroupBoxRenderer.cs
- XmlILConstructAnalyzer.cs
- AdCreatedEventArgs.cs
- XmlSchemaValidationException.cs
- Interop.cs
- AuthStoreRoleProvider.cs
- ApplicationProxyInternal.cs
- OleDbConnectionFactory.cs
- XmlSignificantWhitespace.cs
- CounterSampleCalculator.cs
- OuterGlowBitmapEffect.cs
- XappLauncher.cs
- DictionarySectionHandler.cs
- ContextMenuStrip.cs
- MsmqIntegrationAppDomainProtocolHandler.cs
- BitmapSourceSafeMILHandle.cs
- ParserStreamGeometryContext.cs
- CreateUserWizard.cs
- ThreadAttributes.cs
- UnsignedPublishLicense.cs
- UnionCqlBlock.cs
- LocalizationParserHooks.cs
- NamedElement.cs
- DrawItemEvent.cs
- PointHitTestParameters.cs
- CategoryAttribute.cs
- PatternMatcher.cs
- HttpListenerResponse.cs
- DeferredSelectedIndexReference.cs
- CreateUserWizard.cs
- StorageModelBuildProvider.cs
- SecurityPermission.cs
- listitem.cs
- HttpResponseWrapper.cs
- OLEDB_Util.cs
- DefaultDialogButtons.cs
- SqlFacetAttribute.cs
- LinqDataSourceView.cs
- TerminateSequenceResponse.cs
- RepeaterDataBoundAdapter.cs
- DataFormat.cs
- SecurityTokenException.cs
- ClassImporter.cs
- FilterQueryOptionExpression.cs
- XslCompiledTransform.cs
- XmlSchemaSubstitutionGroup.cs
- WebConfigurationFileMap.cs
- cryptoapiTransform.cs