Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- StringDictionary.cs
- MsmqIntegrationInputChannel.cs
- TableDetailsRow.cs
- ELinqQueryState.cs
- TableRow.cs
- ProxyRpc.cs
- DataGridViewCellToolTipTextNeededEventArgs.cs
- CodeDomConfigurationHandler.cs
- XmlLangPropertyAttribute.cs
- ExpressionNode.cs
- ReadOnlyPropertyMetadata.cs
- ReadOnlyDictionary.cs
- ButtonRenderer.cs
- Matrix3DValueSerializer.cs
- SrgsSubset.cs
- CloudCollection.cs
- OperationCanceledException.cs
- PhysicalAddress.cs
- COM2PropertyDescriptor.cs
- SqlAggregateChecker.cs
- OleDbDataAdapter.cs
- DotExpr.cs
- TdsEnums.cs
- Decoder.cs
- MailAddress.cs
- ProcessHost.cs
- IxmlLineInfo.cs
- ExecutionContext.cs
- BreakRecordTable.cs
- ContextMarshalException.cs
- MappingSource.cs
- AtomParser.cs
- TypeDescriptor.cs
- Condition.cs
- TextBox.cs
- SystemMulticastIPAddressInformation.cs
- EditorAttribute.cs
- ZipIOCentralDirectoryBlock.cs
- FacetValues.cs
- Process.cs
- AssemblyBuilder.cs
- ActiveDocumentEvent.cs
- UICuesEvent.cs
- RemoteDebugger.cs
- ParseChildrenAsPropertiesAttribute.cs
- SimpleApplicationHost.cs
- NonSerializedAttribute.cs
- ProtectedConfigurationSection.cs
- DefaultValueAttribute.cs
- FaultHandlingFilter.cs
- TypeSource.cs
- peersecuritysettings.cs
- XmlMembersMapping.cs
- LinqDataSourceInsertEventArgs.cs
- SelectionListDesigner.cs
- ListDictionary.cs
- ContextStaticAttribute.cs
- LicenseContext.cs
- StreamWithDictionary.cs
- SharedStream.cs
- ListViewInsertEventArgs.cs
- ColumnPropertiesGroup.cs
- DbParameterCollectionHelper.cs
- MimeBasePart.cs
- EncoderExceptionFallback.cs
- WeakReferenceList.cs
- DbParameterCollectionHelper.cs
- QilList.cs
- MethodMessage.cs
- DataViewSetting.cs
- WhileDesigner.cs
- ElementProxy.cs
- TextFormatterHost.cs
- NameTable.cs
- Aes.cs
- AutomationEventArgs.cs
- Paragraph.cs
- DataGridViewColumn.cs
- ProcessHostConfigUtils.cs
- DataGridRow.cs
- ToolStripSeparator.cs
- Double.cs
- MulticastOption.cs
- NotifyIcon.cs
- CredentialCache.cs
- LambdaExpression.cs
- EntryWrittenEventArgs.cs
- Container.cs
- InertiaTranslationBehavior.cs
- Directory.cs
- ExtensionWindowHeader.cs
- LineMetrics.cs
- HttpStreamXmlDictionaryReader.cs
- CqlParserHelpers.cs
- NetDataContractSerializer.cs
- APCustomTypeDescriptor.cs
- UnionExpr.cs
- DataSetSchema.cs
- SqlProfileProvider.cs
- XDeferredAxisSource.cs