Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / 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)
}
}
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- HtmlInputButton.cs
- UnsafeNativeMethods.cs
- RequestCacheValidator.cs
- Mouse.cs
- Setter.cs
- HtmlElementErrorEventArgs.cs
- CodeArgumentReferenceExpression.cs
- TextUtf8RawTextWriter.cs
- ResourceAssociationType.cs
- PaginationProgressEventArgs.cs
- ServerValidateEventArgs.cs
- DictionaryMarkupSerializer.cs
- TablePattern.cs
- SrgsItemList.cs
- GridViewDeleteEventArgs.cs
- XpsFontSubsetter.cs
- Console.cs
- DesignerObject.cs
- CodeIdentifier.cs
- UnaryNode.cs
- UdpReplyToBehavior.cs
- WebReferencesBuildProvider.cs
- OracleCommandSet.cs
- TableLayoutColumnStyleCollection.cs
- StatusBar.cs
- RowUpdatingEventArgs.cs
- EntityProviderFactory.cs
- FormsAuthenticationEventArgs.cs
- RegionIterator.cs
- ActivationServices.cs
- SmiRequestExecutor.cs
- LinqDataSourceEditData.cs
- ObjectStorage.cs
- DataSourceUtil.cs
- EventLogTraceListener.cs
- ZipFileInfo.cs
- WorkBatch.cs
- SqlResolver.cs
- TextSelectionHighlightLayer.cs
- KeyValueSerializer.cs
- designeractionbehavior.cs
- AssemblyUtil.cs
- NamespaceMapping.cs
- FirstMatchCodeGroup.cs
- tibetanshape.cs
- XmlEncoding.cs
- FloaterBaseParaClient.cs
- EntitySetBase.cs
- BitArray.cs
- Matrix3DConverter.cs
- AuthenticatedStream.cs
- HandoffBehavior.cs
- QilScopedVisitor.cs
- DefaultBindingPropertyAttribute.cs
- SqlBuffer.cs
- ParserStreamGeometryContext.cs
- HttpStreamMessage.cs
- WindowsListViewScroll.cs
- SpellCheck.cs
- HttpListenerException.cs
- DataGridViewAutoSizeColumnModeEventArgs.cs
- HttpCapabilitiesBase.cs
- Line.cs
- ToolStripStatusLabel.cs
- BinaryCommonClasses.cs
- SqlParameterizer.cs
- EdmSchemaError.cs
- TemplateLookupAction.cs
- ApplicationFileParser.cs
- TypeDelegator.cs
- SHA384CryptoServiceProvider.cs
- NetStream.cs
- BinaryNode.cs
- MetadataItem.cs
- SoapTransportImporter.cs
- ApplicationSecurityManager.cs
- TreeViewImageIndexConverter.cs
- SQLInt32Storage.cs
- GuidelineCollection.cs
- ExceptionRoutedEventArgs.cs
- DocumentReferenceCollection.cs
- ToolStripButton.cs
- InitializerFacet.cs
- HandleRef.cs
- MultiDataTrigger.cs
- WorkflowEnvironment.cs
- CodeArrayIndexerExpression.cs
- ComponentResourceManager.cs
- Vector3dCollection.cs
- FormsIdentity.cs
- RightsManagementEncryptedStream.cs
- DbProviderSpecificTypePropertyAttribute.cs
- WebPartMinimizeVerb.cs
- OleDbPropertySetGuid.cs
- ParagraphResult.cs
- Scanner.cs
- RolePrincipal.cs
- CompilerError.cs
- CfgParser.cs
- RangeBase.cs