Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / clr / src / BCL / System / Collections / Generic / Comparer.cs / 1 / Comparer.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
using System;
using System.Collections;
using System.Collections.Generic;
namespace System.Collections.Generic
{
using System.Globalization;
using System.Runtime.CompilerServices;
[Serializable()]
[TypeDependencyAttribute("System.Collections.Generic.GenericComparer`1")]
public abstract class Comparer : IComparer, IComparer
{
static Comparer defaultComparer;
public static Comparer Default {
get {
Comparer comparer = defaultComparer;
if (comparer == null) {
comparer = CreateComparer();
defaultComparer = comparer;
}
return comparer;
}
}
private static Comparer CreateComparer() {
Type t = typeof(T);
// If T implements IComparable return a GenericComparer
if (typeof(IComparable).IsAssignableFrom(t)) {
//return (Comparer)Activator.CreateInstance(typeof(GenericComparer<>).MakeGenericType(t));
return (Comparer)(typeof(GenericComparer).TypeHandle.CreateInstanceForAnotherGenericParameter(t));
}
// If T is a Nullable where U implements IComparable return a NullableComparer
if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>)) {
Type u = t.GetGenericArguments()[0];
if (typeof(IComparable<>).MakeGenericType(u).IsAssignableFrom(u)) {
//return (Comparer)Activator.CreateInstance(typeof(NullableComparer<>).MakeGenericType(u));
return (Comparer)(typeof(NullableComparer).TypeHandle.CreateInstanceForAnotherGenericParameter(u));
}
}
// Otherwise return an ObjectComparer
return new ObjectComparer();
}
public abstract int Compare(T x, T y);
int IComparer.Compare(object x, object y) {
if (x == null) return y == null ? 0 : -1;
if (y == null) return 1;
if (x is T && y is T) return Compare((T)x, (T)y);
ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_InvalidArgumentForComparison);
return 0;
}
}
[Serializable()]
internal class GenericComparer : Comparer where T: IComparable
{
public override int Compare(T x, T y) {
if (x != null) {
if (y != null) return x.CompareTo(y);
return 1;
}
if (y != null) return -1;
return 0;
}
// Equals method for the comparer itself.
public override bool Equals(Object obj){
GenericComparer comparer = obj as GenericComparer;
return comparer != null;
}
public override int GetHashCode() {
return this.GetType().Name.GetHashCode();
}
}
[Serializable()]
internal class NullableComparer : Comparer> where T : struct, IComparable
{
public override int Compare(Nullable x, Nullable y) {
if (x.HasValue) {
if (y.HasValue) return x.value.CompareTo(y.value);
return 1;
}
if (y.HasValue) return -1;
return 0;
}
// Equals method for the comparer itself.
public override bool Equals(Object obj){
NullableComparer comparer = obj as NullableComparer;
return comparer != null;
}
public override int GetHashCode() {
return this.GetType().Name.GetHashCode();
}
}
[Serializable()]
internal class ObjectComparer : Comparer
{
public override int Compare(T x, T y) {
return System.Collections.Comparer.Default.Compare(x, y);
}
// Equals method for the comparer itself.
public override bool Equals(Object obj){
ObjectComparer comparer = obj as ObjectComparer;
return comparer != null;
}
public override int GetHashCode() {
return this.GetType().Name.GetHashCode();
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
using System;
using System.Collections;
using System.Collections.Generic;
namespace System.Collections.Generic
{
using System.Globalization;
using System.Runtime.CompilerServices;
[Serializable()]
[TypeDependencyAttribute("System.Collections.Generic.GenericComparer`1")]
public abstract class Comparer : IComparer, IComparer
{
static Comparer defaultComparer;
public static Comparer Default {
get {
Comparer comparer = defaultComparer;
if (comparer == null) {
comparer = CreateComparer();
defaultComparer = comparer;
}
return comparer;
}
}
private static Comparer CreateComparer() {
Type t = typeof(T);
// If T implements IComparable return a GenericComparer
if (typeof(IComparable).IsAssignableFrom(t)) {
//return (Comparer)Activator.CreateInstance(typeof(GenericComparer<>).MakeGenericType(t));
return (Comparer)(typeof(GenericComparer).TypeHandle.CreateInstanceForAnotherGenericParameter(t));
}
// If T is a Nullable where U implements IComparable return a NullableComparer
if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>)) {
Type u = t.GetGenericArguments()[0];
if (typeof(IComparable<>).MakeGenericType(u).IsAssignableFrom(u)) {
//return (Comparer)Activator.CreateInstance(typeof(NullableComparer<>).MakeGenericType(u));
return (Comparer)(typeof(NullableComparer).TypeHandle.CreateInstanceForAnotherGenericParameter(u));
}
}
// Otherwise return an ObjectComparer
return new ObjectComparer();
}
public abstract int Compare(T x, T y);
int IComparer.Compare(object x, object y) {
if (x == null) return y == null ? 0 : -1;
if (y == null) return 1;
if (x is T && y is T) return Compare((T)x, (T)y);
ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_InvalidArgumentForComparison);
return 0;
}
}
[Serializable()]
internal class GenericComparer : Comparer where T: IComparable
{
public override int Compare(T x, T y) {
if (x != null) {
if (y != null) return x.CompareTo(y);
return 1;
}
if (y != null) return -1;
return 0;
}
// Equals method for the comparer itself.
public override bool Equals(Object obj){
GenericComparer comparer = obj as GenericComparer;
return comparer != null;
}
public override int GetHashCode() {
return this.GetType().Name.GetHashCode();
}
}
[Serializable()]
internal class NullableComparer : Comparer> where T : struct, IComparable
{
public override int Compare(Nullable x, Nullable y) {
if (x.HasValue) {
if (y.HasValue) return x.value.CompareTo(y.value);
return 1;
}
if (y.HasValue) return -1;
return 0;
}
// Equals method for the comparer itself.
public override bool Equals(Object obj){
NullableComparer comparer = obj as NullableComparer;
return comparer != null;
}
public override int GetHashCode() {
return this.GetType().Name.GetHashCode();
}
}
[Serializable()]
internal class ObjectComparer : Comparer
{
public override int Compare(T x, T y) {
return System.Collections.Comparer.Default.Compare(x, y);
}
// Equals method for the comparer itself.
public override bool Equals(Object obj){
ObjectComparer comparer = obj as ObjectComparer;
return comparer != null;
}
public override int GetHashCode() {
return this.GetType().Name.GetHashCode();
}
}
}
// 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
- RulePatternOps.cs
- TraceFilter.cs
- StartUpEventArgs.cs
- sapiproxy.cs
- BooleanFunctions.cs
- AlternateViewCollection.cs
- GridViewColumnHeaderAutomationPeer.cs
- QueryAccessibilityHelpEvent.cs
- BatchStream.cs
- Dispatcher.cs
- TextBoxBase.cs
- XmlFileEditor.cs
- TextTreeUndo.cs
- NodeFunctions.cs
- BindingMemberInfo.cs
- ColumnResizeAdorner.cs
- BulletedList.cs
- AdjustableArrowCap.cs
- InputReportEventArgs.cs
- XmlSchemaSimpleTypeUnion.cs
- MobileDeviceCapabilitiesSectionHandler.cs
- Encoder.cs
- XmlDataProvider.cs
- TimeSpanValidator.cs
- OverrideMode.cs
- _StreamFramer.cs
- ListDictionaryInternal.cs
- StringReader.cs
- FullTextState.cs
- activationcontext.cs
- ExternalFile.cs
- StateItem.cs
- DisposableCollectionWrapper.cs
- KeysConverter.cs
- MaterializeFromAtom.cs
- BamlResourceDeserializer.cs
- VariableReference.cs
- CultureInfoConverter.cs
- HitTestWithPointDrawingContextWalker.cs
- ProfilePropertySettings.cs
- RuntimeHandles.cs
- WriterOutput.cs
- DependencyObjectType.cs
- LogStream.cs
- BitmapCacheBrush.cs
- RedirectionProxy.cs
- EqualityComparer.cs
- ActiveXSite.cs
- EntryPointNotFoundException.cs
- GeneratedView.cs
- ProcessHostConfigUtils.cs
- ContentHostHelper.cs
- DataPagerField.cs
- ProgressBarRenderer.cs
- Logging.cs
- FunctionImportMapping.cs
- ObjectKeyFrameCollection.cs
- PeerPresenceInfo.cs
- MatrixAnimationUsingPath.cs
- IChannel.cs
- BitmapEffectState.cs
- EventSource.cs
- KeyEvent.cs
- ReachObjectContext.cs
- SharedDp.cs
- TickBar.cs
- DataServiceStreamResponse.cs
- RawStylusActions.cs
- PaperSource.cs
- InvalidTimeZoneException.cs
- BuildManager.cs
- ResourceAssociationType.cs
- Image.cs
- ValueChangedEventManager.cs
- EventLogger.cs
- AxHost.cs
- ToolStripDropDownMenu.cs
- PolyLineSegment.cs
- DbParameterCollection.cs
- SqlRewriteScalarSubqueries.cs
- FormsAuthenticationConfiguration.cs
- SessionSwitchEventArgs.cs
- TextEditorTables.cs
- HitTestParameters.cs
- PowerModeChangedEventArgs.cs
- TemplateControl.cs
- SystemKeyConverter.cs
- CodeDirectionExpression.cs
- FuncCompletionCallbackWrapper.cs
- XmlLangPropertyAttribute.cs
- AssemblyBuilder.cs
- DbParameterHelper.cs
- FileUpload.cs
- TextParagraphProperties.cs
- CqlWriter.cs
- BinHexEncoder.cs
- XamlRtfConverter.cs
- HttpProxyCredentialType.cs
- CTreeGenerator.cs
- ToolStripComboBox.cs