Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / clr / src / BCL / System / Nullable.cs / 1 / Nullable.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
using System;
namespace System
{
using System.Globalization;
using System.Reflection;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Security;
// Warning, don't put System.Runtime.Serialization.On*Serializ*Attribute
// on this class without first fixing ObjectClone::InvokeVtsCallbacks
// Also, because we have special type system support that says a a boxed Nullable
// can be used where a boxed is use, Nullable can not implement any intefaces
// at all (since T may not). Do NOT add any interfaces to Nullable!
//
[TypeDependencyAttribute("System.Collections.Generic.NullableComparer`1")]
[TypeDependencyAttribute("System.Collections.Generic.NullableEqualityComparer`1")]
[Serializable()]
public struct Nullable where T : struct
{
private bool hasValue;
internal T value;
public Nullable(T value) {
this.value = value;
this.hasValue = true;
}
public bool HasValue {
get {
return hasValue;
}
}
public T Value {
get {
if (!HasValue) {
ThrowHelper.ThrowInvalidOperationException(ExceptionResource.InvalidOperation_NoValue);
}
return value;
}
}
public T GetValueOrDefault() {
return value;
}
public T GetValueOrDefault(T defaultValue) {
return HasValue ? value : defaultValue;
}
public override bool Equals(object other) {
if (!HasValue) return other == null;
if (other == null) return false;
return value.Equals(other);
}
public override int GetHashCode() {
return HasValue ? value.GetHashCode() : 0;
}
public override string ToString() {
return HasValue ? value.ToString() : "";
}
public static implicit operator Nullable(T value) {
return new Nullable(value);
}
public static explicit operator T(Nullable value) {
return value.Value;
}
// The following already obsoleted methods were removed:
// public int CompareTo(object other)
// public int CompareTo(Nullable other)
// public bool Equals(Nullable other)
// public static Nullable FromObject(object value)
// public object ToObject()
// public string ToString(string format)
// public string ToString(IFormatProvider provider)
// public string ToString(string format, IFormatProvider provider)
// The following newly obsoleted methods were removed:
// string IFormattable.ToString(string format, IFormatProvider provider)
// int IComparable.CompareTo(object other)
// int IComparable>.CompareTo(Nullable other)
// bool IEquatable>.Equals(Nullable other)
}
[System.Runtime.InteropServices.ComVisible(true)]
public static class Nullable
{
[System.Runtime.InteropServices.ComVisible(true)]
public static int Compare(Nullable n1, Nullable n2) where T : struct
{
if (n1.HasValue) {
if (n2.HasValue) return Comparer.Default.Compare(n1.value, n2.value);
return 1;
}
if (n2.HasValue) return -1;
return 0;
}
[System.Runtime.InteropServices.ComVisible(true)]
public static bool Equals(Nullable n1, Nullable n2) where T : struct
{
if (n1.HasValue) {
if (n2.HasValue) return EqualityComparer.Default.Equals(n1.value, n2.value);
return false;
}
if (n2.HasValue) return false;
return true;
}
// If the type provided is not a Nullable Type, return null.
// Otherwise, returns the underlying type of the Nullable type
public static Type GetUnderlyingType(Type nullableType) {
if( nullableType == null) {
throw new ArgumentNullException("nullableType");
}
Type result = null;
if( nullableType.IsGenericType && !nullableType.IsGenericTypeDefinition) {
// instantiated generic type only
Type genericType = nullableType.GetGenericTypeDefinition();
if( genericType == typeof(Nullable<>)) {
result = nullableType.GetGenericArguments()[0];
}
}
return result;
}
// The following already obsoleted methods were removed:
// public static bool HasValue(Nullable value)
// public static T GetValueOrDefault(Nullable value)
// public static T GetValueOrDefault(Nullable value, T valueWhenNull)
// The following newly obsoleted methods were removed:
// public static Nullable FromObject(object value)
// public static object ToObject(Nullable value)
// public static object Wrap(object value, Type type)
// public static object Unwrap(object value)
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
using System;
namespace System
{
using System.Globalization;
using System.Reflection;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Security;
// Warning, don't put System.Runtime.Serialization.On*Serializ*Attribute
// on this class without first fixing ObjectClone::InvokeVtsCallbacks
// Also, because we have special type system support that says a a boxed Nullable
// can be used where a boxed is use, Nullable can not implement any intefaces
// at all (since T may not). Do NOT add any interfaces to Nullable!
//
[TypeDependencyAttribute("System.Collections.Generic.NullableComparer`1")]
[TypeDependencyAttribute("System.Collections.Generic.NullableEqualityComparer`1")]
[Serializable()]
public struct Nullable where T : struct
{
private bool hasValue;
internal T value;
public Nullable(T value) {
this.value = value;
this.hasValue = true;
}
public bool HasValue {
get {
return hasValue;
}
}
public T Value {
get {
if (!HasValue) {
ThrowHelper.ThrowInvalidOperationException(ExceptionResource.InvalidOperation_NoValue);
}
return value;
}
}
public T GetValueOrDefault() {
return value;
}
public T GetValueOrDefault(T defaultValue) {
return HasValue ? value : defaultValue;
}
public override bool Equals(object other) {
if (!HasValue) return other == null;
if (other == null) return false;
return value.Equals(other);
}
public override int GetHashCode() {
return HasValue ? value.GetHashCode() : 0;
}
public override string ToString() {
return HasValue ? value.ToString() : "";
}
public static implicit operator Nullable(T value) {
return new Nullable(value);
}
public static explicit operator T(Nullable value) {
return value.Value;
}
// The following already obsoleted methods were removed:
// public int CompareTo(object other)
// public int CompareTo(Nullable other)
// public bool Equals(Nullable other)
// public static Nullable FromObject(object value)
// public object ToObject()
// public string ToString(string format)
// public string ToString(IFormatProvider provider)
// public string ToString(string format, IFormatProvider provider)
// The following newly obsoleted methods were removed:
// string IFormattable.ToString(string format, IFormatProvider provider)
// int IComparable.CompareTo(object other)
// int IComparable>.CompareTo(Nullable other)
// bool IEquatable>.Equals(Nullable other)
}
[System.Runtime.InteropServices.ComVisible(true)]
public static class Nullable
{
[System.Runtime.InteropServices.ComVisible(true)]
public static int Compare(Nullable n1, Nullable n2) where T : struct
{
if (n1.HasValue) {
if (n2.HasValue) return Comparer.Default.Compare(n1.value, n2.value);
return 1;
}
if (n2.HasValue) return -1;
return 0;
}
[System.Runtime.InteropServices.ComVisible(true)]
public static bool Equals(Nullable n1, Nullable n2) where T : struct
{
if (n1.HasValue) {
if (n2.HasValue) return EqualityComparer.Default.Equals(n1.value, n2.value);
return false;
}
if (n2.HasValue) return false;
return true;
}
// If the type provided is not a Nullable Type, return null.
// Otherwise, returns the underlying type of the Nullable type
public static Type GetUnderlyingType(Type nullableType) {
if( nullableType == null) {
throw new ArgumentNullException("nullableType");
}
Type result = null;
if( nullableType.IsGenericType && !nullableType.IsGenericTypeDefinition) {
// instantiated generic type only
Type genericType = nullableType.GetGenericTypeDefinition();
if( genericType == typeof(Nullable<>)) {
result = nullableType.GetGenericArguments()[0];
}
}
return result;
}
// The following already obsoleted methods were removed:
// public static bool HasValue(Nullable value)
// public static T GetValueOrDefault(Nullable value)
// public static T GetValueOrDefault(Nullable value, T valueWhenNull)
// The following newly obsoleted methods were removed:
// public static Nullable FromObject(object value)
// public static object ToObject(Nullable value)
// public static object Wrap(object value, Type type)
// public static object Unwrap(object value)
}
}
// 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
- GridViewDeleteEventArgs.cs
- BrowserTree.cs
- ApplicationManager.cs
- VScrollProperties.cs
- XmlCDATASection.cs
- CDSCollectionETWBCLProvider.cs
- WebPartDescription.cs
- DataGridViewRowStateChangedEventArgs.cs
- TemplateXamlParser.cs
- FunctionParameter.cs
- Timeline.cs
- AppModelKnownContentFactory.cs
- XmlNamespaceMapping.cs
- OdbcReferenceCollection.cs
- ControlBuilderAttribute.cs
- FixedNode.cs
- _FtpControlStream.cs
- odbcmetadatafactory.cs
- RepeaterItemCollection.cs
- WindowsIdentity.cs
- SqlConnectionStringBuilder.cs
- ProcessHostMapPath.cs
- ScrollItemPatternIdentifiers.cs
- TextRangeEditTables.cs
- MimeBasePart.cs
- DelimitedListTraceListener.cs
- OracleDataReader.cs
- RegisteredExpandoAttribute.cs
- StylusPointDescription.cs
- ServiceMetadataPublishingElement.cs
- Regex.cs
- RemotingAttributes.cs
- MimeTypeAttribute.cs
- basecomparevalidator.cs
- Item.cs
- LinqDataSourceDeleteEventArgs.cs
- AttachedPropertyBrowsableForChildrenAttribute.cs
- VisualTreeUtils.cs
- DetailsViewRow.cs
- RijndaelCryptoServiceProvider.cs
- PeerContact.cs
- SemaphoreSecurity.cs
- DelegatingConfigHost.cs
- DoubleLinkListEnumerator.cs
- CodeMethodInvokeExpression.cs
- XamlToRtfWriter.cs
- DataGridViewDataConnection.cs
- JoinCqlBlock.cs
- COAUTHINFO.cs
- SurrogateEncoder.cs
- AxHost.cs
- DNS.cs
- PingReply.cs
- HttpChannelHelper.cs
- RectangleGeometry.cs
- StandardOleMarshalObject.cs
- ConfigXmlText.cs
- KnownBoxes.cs
- BitmapEffectGroup.cs
- DateTimeSerializationSection.cs
- AssemblyUtil.cs
- SettingsAttributes.cs
- SourceSwitch.cs
- BitmapMetadataEnumerator.cs
- StringArrayConverter.cs
- WebRequestModuleElement.cs
- ExtendedProtectionPolicyTypeConverter.cs
- OrderedDictionary.cs
- DBPropSet.cs
- ToolBarButtonClickEvent.cs
- DragStartedEventArgs.cs
- EncoderBestFitFallback.cs
- ActivityWithResultConverter.cs
- Column.cs
- XmlProcessingInstruction.cs
- DynamicILGenerator.cs
- PathSegment.cs
- DictionaryChange.cs
- X509CertificateCollection.cs
- SafeLocalMemHandle.cs
- Executor.cs
- basecomparevalidator.cs
- RepeaterCommandEventArgs.cs
- PrivilegedConfigurationManager.cs
- DiscoveryExceptionDictionary.cs
- WebPartDeleteVerb.cs
- TextParentUndoUnit.cs
- ButtonField.cs
- VScrollBar.cs
- ItemContainerGenerator.cs
- IPAddress.cs
- CodeBlockBuilder.cs
- SystemTcpStatistics.cs
- StreamUpgradeBindingElement.cs
- WmpBitmapDecoder.cs
- PropertyChangeTracker.cs
- CodePrimitiveExpression.cs
- ColumnHeaderConverter.cs
- KerberosSecurityTokenProvider.cs
- XmlSchemaComplexContentExtension.cs