Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / Collections / Generic / Comparer.cs / 1305376 / Comparer.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== //[....] // using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics.Contracts; //using System.Globalization; using System.Runtime.CompilerServices; namespace System.Collections.Generic { [Serializable] [TypeDependencyAttribute("System.Collections.Generic.GenericComparer`1")] public abstract class Comparer: IComparer, IComparer { static Comparer defaultComparer; public static Comparer Default { [System.Security.SecuritySafeCritical] // auto-generated get { Contract.Ensures(Contract.Result >() != null); Comparer comparer = defaultComparer; if (comparer == null) { comparer = CreateComparer(); defaultComparer = comparer; } return comparer; } } [System.Security.SecuritySafeCritical] // auto-generated private static Comparer CreateComparer() { RuntimeType t = (RuntimeType)typeof(T); // If T implements IComparable return a GenericComparer if (typeof(IComparable ).IsAssignableFrom(t)) { //return (Comparer )Activator.CreateInstance(typeof(GenericComparer<>).MakeGenericType(t)); return (Comparer )RuntimeTypeHandle.CreateInstanceForAnotherGenericParameter((RuntimeType)typeof(GenericComparer ), t); } // If T is a Nullable where U implements IComparable return a NullableComparer if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>)) { RuntimeType u = (RuntimeType)t.GetGenericArguments()[0]; if (typeof(IComparable<>).MakeGenericType(u).IsAssignableFrom(u)) { //return (Comparer )Activator.CreateInstance(typeof(NullableComparer<>).MakeGenericType(u)); return (Comparer )RuntimeTypeHandle.CreateInstanceForAnotherGenericParameter((RuntimeType)typeof(NullableComparer ), 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
- SchemaEntity.cs
- Single.cs
- PerfService.cs
- SizeValueSerializer.cs
- TreeNodeCollection.cs
- RadioButton.cs
- OleDbMetaDataFactory.cs
- RectKeyFrameCollection.cs
- IteratorFilter.cs
- StylusDevice.cs
- XmlQueryType.cs
- BooleanAnimationBase.cs
- BaseCAMarshaler.cs
- BoolExpr.cs
- ListMarkerSourceInfo.cs
- SubclassTypeValidatorAttribute.cs
- _RegBlobWebProxyDataBuilder.cs
- MergeExecutor.cs
- ColumnMap.cs
- DescendantQuery.cs
- SystemTcpConnection.cs
- DataGridViewImageCell.cs
- RtType.cs
- RestHandler.cs
- LazyTextWriterCreator.cs
- CoreChannel.cs
- HttpConfigurationContext.cs
- Console.cs
- HostedHttpTransportManager.cs
- ConfigurationManagerHelper.cs
- DataPagerFieldCollection.cs
- metadatamappinghashervisitor.hashsourcebuilder.cs
- OptimalBreakSession.cs
- ContractHandle.cs
- ResourceType.cs
- Emitter.cs
- _BaseOverlappedAsyncResult.cs
- CodeChecksumPragma.cs
- ObjectSet.cs
- FamilyTypeface.cs
- DetailsViewRow.cs
- Sentence.cs
- FormatException.cs
- CapabilitiesPattern.cs
- Attributes.cs
- HandlerBase.cs
- HostVisual.cs
- PolyQuadraticBezierSegment.cs
- Rect3D.cs
- UnsupportedPolicyOptionsException.cs
- TextEffect.cs
- ClientFormsIdentity.cs
- TemplateControlBuildProvider.cs
- Pointer.cs
- BidOverLoads.cs
- UIAgentInitializationException.cs
- _AuthenticationState.cs
- TextDecorationCollectionConverter.cs
- IdentityReference.cs
- IApplicationTrustManager.cs
- PagesSection.cs
- PersistChildrenAttribute.cs
- ZipIOExtraFieldZip64Element.cs
- TransactionFlowBindingElementImporter.cs
- StringResourceManager.cs
- XmlSchemaSimpleType.cs
- Code.cs
- IEnumerable.cs
- Token.cs
- WindowsTreeView.cs
- SimpleTextLine.cs
- Int32Rect.cs
- ArgumentReference.cs
- WizardStepBase.cs
- DataGridViewComboBoxColumn.cs
- XhtmlCssHandler.cs
- StreamWriter.cs
- DesignerView.cs
- EditorBrowsableAttribute.cs
- bindurihelper.cs
- SmiMetaDataProperty.cs
- PrintDialogDesigner.cs
- SqlStatistics.cs
- Privilege.cs
- Style.cs
- UriTemplateTableMatchCandidate.cs
- DbConnectionPoolIdentity.cs
- Separator.cs
- DataKey.cs
- CqlGenerator.cs
- ViewPort3D.cs
- ExpressionVisitor.cs
- RulePatternOps.cs
- BaseTemplateBuildProvider.cs
- DependencyObjectProvider.cs
- TableColumnCollectionInternal.cs
- CommentAction.cs
- NativeMethods.cs
- LabelLiteral.cs
- LayoutEngine.cs