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
- UpdateEventArgs.cs
- DataGridViewElement.cs
- DBDataPermission.cs
- HttpCapabilitiesEvaluator.cs
- ContractCodeDomInfo.cs
- FontFamilyIdentifier.cs
- SemanticAnalyzer.cs
- EntityDataSourceContextCreatingEventArgs.cs
- FunctionCommandText.cs
- OrderedDictionary.cs
- ProfileModule.cs
- VoiceObjectToken.cs
- ScrollBar.cs
- Adorner.cs
- CustomCategoryAttribute.cs
- AccessDataSourceView.cs
- DateTimeOffset.cs
- TimeoutHelper.cs
- DocumentsTrace.cs
- DynamicPropertyHolder.cs
- IPEndPointCollection.cs
- OdbcError.cs
- Claim.cs
- DataGridBoolColumn.cs
- ToolStripScrollButton.cs
- InvalidCommandTreeException.cs
- StatusBar.cs
- SamlAction.cs
- SpeechSeg.cs
- InputBinding.cs
- SponsorHelper.cs
- SmiMetaData.cs
- Graphics.cs
- RequestResizeEvent.cs
- Knowncolors.cs
- SplineKeyFrames.cs
- IEnumerable.cs
- XsdDuration.cs
- CompareInfo.cs
- OdbcParameter.cs
- ValidationUtility.cs
- SQLBytes.cs
- SqlRemoveConstantOrderBy.cs
- EntitySqlQueryState.cs
- ControlPaint.cs
- StatusBarPanelClickEvent.cs
- SortedDictionary.cs
- DefaultTypeArgumentAttribute.cs
- ParamArrayAttribute.cs
- LayoutSettings.cs
- CacheOutputQuery.cs
- SoapAttributes.cs
- SqlFileStream.cs
- WindowsFormsEditorServiceHelper.cs
- ToolBar.cs
- Point4DConverter.cs
- Semaphore.cs
- CustomWebEventKey.cs
- SafeArchiveContext.cs
- CqlLexerHelpers.cs
- TableAutomationPeer.cs
- CommandDevice.cs
- ColumnCollectionEditor.cs
- ToolStripItem.cs
- InputProviderSite.cs
- Repeater.cs
- ResourceDictionaryCollection.cs
- CreateUserWizard.cs
- cookie.cs
- DataBindingList.cs
- ProcessModelSection.cs
- WebBrowser.cs
- VectorConverter.cs
- EmbeddedObject.cs
- basenumberconverter.cs
- DiscoveryUtility.cs
- WebPartEventArgs.cs
- DurableEnlistmentState.cs
- AnimationClock.cs
- KnownBoxes.cs
- BuilderInfo.cs
- ProfileEventArgs.cs
- DashStyle.cs
- TextEditorSelection.cs
- TargetFrameworkUtil.cs
- WasEndpointConfigContainer.cs
- DataGridViewControlCollection.cs
- Profiler.cs
- _Semaphore.cs
- CounterSampleCalculator.cs
- BitmapSource.cs
- XmlEncoding.cs
- DrawTreeNodeEventArgs.cs
- NameValueCollection.cs
- clipboard.cs
- InternalSafeNativeMethods.cs
- DataGridViewBindingCompleteEventArgs.cs
- SQLInt64.cs
- ExtensionQuery.cs
- CompositeActivityDesigner.cs