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
- StdValidatorsAndConverters.cs
- Claim.cs
- AnnotationAdorner.cs
- BaseParser.cs
- BaseCollection.cs
- _SpnDictionary.cs
- ClientData.cs
- ConfigXmlElement.cs
- DetailsViewInsertEventArgs.cs
- ChtmlTextBoxAdapter.cs
- PictureBox.cs
- OwnerDrawPropertyBag.cs
- SafeCertificateContext.cs
- Directory.cs
- UIElement.cs
- SaveFileDialog.cs
- EditorPartCollection.cs
- GenerateScriptTypeAttribute.cs
- SqlTriggerAttribute.cs
- MessagePartProtectionMode.cs
- XmlSchemaSimpleContent.cs
- CqlLexerHelpers.cs
- CountAggregationOperator.cs
- BasicHttpSecurityMode.cs
- StructuredTypeEmitter.cs
- IProvider.cs
- WebPartCatalogAddVerb.cs
- SoapMessage.cs
- AuthorizationSection.cs
- SafeFreeMibTable.cs
- ListDictionaryInternal.cs
- DataGridViewColumnCollection.cs
- TempFiles.cs
- ImportRequest.cs
- FrameworkObject.cs
- SetterBase.cs
- SqlPersonalizationProvider.cs
- SafePipeHandle.cs
- Stroke2.cs
- SQLDecimal.cs
- FrameworkEventSource.cs
- SelectingProviderEventArgs.cs
- StrongNameUtility.cs
- _AuthenticationState.cs
- InputScopeAttribute.cs
- TraceSection.cs
- Helper.cs
- CompressedStack.cs
- NonSerializedAttribute.cs
- FontUnit.cs
- EventWaitHandleSecurity.cs
- __FastResourceComparer.cs
- AuthorizationSection.cs
- Dump.cs
- ProcessHostConfigUtils.cs
- UiaCoreApi.cs
- SqlConnectionPoolProviderInfo.cs
- RawAppCommandInputReport.cs
- FontSizeConverter.cs
- CheckBoxField.cs
- AggregationMinMaxHelpers.cs
- DbProviderFactoriesConfigurationHandler.cs
- DefaultExpression.cs
- DllNotFoundException.cs
- WorkflowRuntimeSection.cs
- BamlLocalizableResourceKey.cs
- SingleTagSectionHandler.cs
- KerberosSecurityTokenProvider.cs
- ASCIIEncoding.cs
- StringCollectionMarkupSerializer.cs
- SafeCoTaskMem.cs
- TypefaceCollection.cs
- SoapElementAttribute.cs
- WebPageTraceListener.cs
- TableLayout.cs
- HtmlFormParameterWriter.cs
- PropertyValueUIItem.cs
- SerialReceived.cs
- PartManifestEntry.cs
- baseshape.cs
- ListViewItemMouseHoverEvent.cs
- JsonDeserializer.cs
- XmlCharCheckingReader.cs
- ParameterModifier.cs
- IODescriptionAttribute.cs
- DocumentReferenceCollection.cs
- XmlSchemaNotation.cs
- SessionStateContainer.cs
- TrackingServices.cs
- ThousandthOfEmRealDoubles.cs
- DataGridCell.cs
- StructuredTypeEmitter.cs
- DataTableClearEvent.cs
- ConstraintEnumerator.cs
- GraphicsContainer.cs
- DeviceContext.cs
- ObjectItemCollection.cs
- MultitargetUtil.cs
- RelationshipSet.cs
- FormsAuthenticationUser.cs