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
- EventProviderTraceListener.cs
- SystemWebCachingSectionGroup.cs
- SmtpFailedRecipientsException.cs
- WebPartsPersonalizationAuthorization.cs
- ListSortDescriptionCollection.cs
- PageWrapper.cs
- CharacterMetrics.cs
- FontNamesConverter.cs
- Camera.cs
- WmpBitmapDecoder.cs
- Timer.cs
- _LazyAsyncResult.cs
- Executor.cs
- EventLogSession.cs
- ProcessThread.cs
- BinHexDecoder.cs
- DataGridViewDataErrorEventArgs.cs
- ClientUtils.cs
- ToolStripInSituService.cs
- MatrixIndependentAnimationStorage.cs
- ChtmlPageAdapter.cs
- WorkflowClientDeliverMessageWrapper.cs
- ToolStripManager.cs
- SqlStream.cs
- PropertyChangingEventArgs.cs
- Console.cs
- ButtonFlatAdapter.cs
- SineEase.cs
- LogPolicy.cs
- RichTextBoxConstants.cs
- objectresult_tresulttype.cs
- PropertyDescriptorComparer.cs
- TextTreePropertyUndoUnit.cs
- WebHttpSecurityElement.cs
- DynamicUpdateCommand.cs
- BaseCollection.cs
- XmlTextAttribute.cs
- MessageSecurityVersionConverter.cs
- mediapermission.cs
- Rotation3DAnimation.cs
- HtmlAnchor.cs
- XmlDocumentType.cs
- SecurityTokenResolver.cs
- Char.cs
- XmlElementAttribute.cs
- KnownTypesHelper.cs
- ContextMenuStrip.cs
- RepeaterItemCollection.cs
- MSAAEventDispatcher.cs
- StatusBarDesigner.cs
- StylusTip.cs
- TraceContextEventArgs.cs
- Assign.cs
- SqlExpressionNullability.cs
- EntityDataSourceDataSelectionPanel.cs
- Object.cs
- ComplexTypeEmitter.cs
- QueryActivatableWorkflowsCommand.cs
- SQLSingle.cs
- ContractMapping.cs
- RawStylusSystemGestureInputReport.cs
- SerializerDescriptor.cs
- HandledMouseEvent.cs
- CellParaClient.cs
- EnumerableWrapperWeakToStrong.cs
- SubclassTypeValidator.cs
- DefaultParameterValueAttribute.cs
- __ConsoleStream.cs
- HttpStreamMessage.cs
- WebPartHelpVerb.cs
- RegularExpressionValidator.cs
- Win32Exception.cs
- BaseCAMarshaler.cs
- EmptyControlCollection.cs
- ElementAction.cs
- ToolStripScrollButton.cs
- DockPattern.cs
- DataMemberConverter.cs
- DataControlFieldCollection.cs
- VisualTarget.cs
- shaper.cs
- NeutralResourcesLanguageAttribute.cs
- AttachmentCollection.cs
- RelatedPropertyManager.cs
- ThicknessConverter.cs
- CompensatableTransactionScopeActivityDesigner.cs
- SoapSchemaMember.cs
- NetCodeGroup.cs
- MetadataItemEmitter.cs
- DataListItem.cs
- Lookup.cs
- SystemColors.cs
- QilVisitor.cs
- Msec.cs
- DictionaryManager.cs
- SpellerInterop.cs
- wgx_exports.cs
- PersistChildrenAttribute.cs
- ServicePointManager.cs
- shaper.cs