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
- XmlNavigatorFilter.cs
- Binding.cs
- MessageBox.cs
- SqlDataSourceCache.cs
- CodeMemberProperty.cs
- EmptyQuery.cs
- CreateUserWizardDesigner.cs
- KoreanCalendar.cs
- TypeNameConverter.cs
- UrlAuthorizationModule.cs
- SHA512Managed.cs
- DataAccessor.cs
- ConfigXmlWhitespace.cs
- RegexGroup.cs
- EncoderReplacementFallback.cs
- GuidConverter.cs
- ControlCachePolicy.cs
- BindingNavigator.cs
- SystemResources.cs
- Configuration.cs
- Binding.cs
- PropertyGridView.cs
- AsymmetricSecurityProtocolFactory.cs
- ClientRolePrincipal.cs
- NavigationWindow.cs
- CallSiteBinder.cs
- UnsettableComboBox.cs
- CharAnimationUsingKeyFrames.cs
- DataRecordInfo.cs
- LocatorPartList.cs
- ProcessRequestArgs.cs
- XmlLoader.cs
- ArgumentDesigner.xaml.cs
- ToolStripDropDownItem.cs
- MemoryStream.cs
- DataGridViewButtonCell.cs
- KnownTypeAttribute.cs
- TextBoxBase.cs
- DataGridViewButtonColumn.cs
- DataControlHelper.cs
- ZipIOExtraFieldZip64Element.cs
- RemoteArgument.cs
- SplashScreenNativeMethods.cs
- TypeLibConverter.cs
- Quaternion.cs
- BypassElementCollection.cs
- XmlImplementation.cs
- storepermissionattribute.cs
- WindowsPrincipal.cs
- isolationinterop.cs
- IgnoreSectionHandler.cs
- ZoneIdentityPermission.cs
- Color.cs
- NumericUpDownAccelerationCollection.cs
- SqlSupersetValidator.cs
- ConfigurationElement.cs
- RelationshipType.cs
- ConstructorNeedsTagAttribute.cs
- HostingEnvironment.cs
- PageResolution.cs
- AcceptorSessionSymmetricMessageSecurityProtocol.cs
- XmlAttribute.cs
- GenerateHelper.cs
- ClusterRegistryConfigurationProvider.cs
- AutomationEventArgs.cs
- RegularExpressionValidator.cs
- OleAutBinder.cs
- _FtpDataStream.cs
- SynchronizedCollection.cs
- ErasingStroke.cs
- RSAOAEPKeyExchangeDeformatter.cs
- TypeUnloadedException.cs
- AspCompat.cs
- MdImport.cs
- DataBindingList.cs
- PolicyStatement.cs
- ContractMethodParameterInfo.cs
- CookieParameter.cs
- DataSetMappper.cs
- SimpleType.cs
- FileLogRecordStream.cs
- ResourceKey.cs
- DynamicRendererThreadManager.cs
- SessionState.cs
- RemotingClientProxy.cs
- SqlRetyper.cs
- COM2PropertyDescriptor.cs
- ViewStateException.cs
- ConditionCollection.cs
- StyleXamlParser.cs
- SpeechSeg.cs
- ColorConvertedBitmap.cs
- DropSource.cs
- StringAnimationUsingKeyFrames.cs
- _BasicClient.cs
- WSFederationHttpSecurityMode.cs
- SqlAliaser.cs
- Adorner.cs
- VariantWrapper.cs
- Dictionary.cs