Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / clr / src / BCL / System / Collections / Comparer.cs / 1 / Comparer.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
/*============================================================
**
** Class: Comparer
**
**
** Purpose: Default IComparer implementation.
**
**
===========================================================*/
namespace System.Collections {
using System;
using System.Globalization;
using System.Runtime.Serialization;
using System.Security.Permissions;
[Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class Comparer : IComparer , ISerializable
{
private CompareInfo m_compareInfo;
public static readonly Comparer Default = new Comparer(CultureInfo.CurrentCulture);
public static readonly Comparer DefaultInvariant = new Comparer(CultureInfo.InvariantCulture);
private const String CompareInfoName = "CompareInfo";
private Comparer() {
m_compareInfo = null;
}
public Comparer(CultureInfo culture) {
if (culture==null) {
throw new ArgumentNullException("culture");
}
m_compareInfo = culture.CompareInfo;
}
private Comparer(SerializationInfo info, StreamingContext context) {
m_compareInfo = null;
SerializationInfoEnumerator enumerator = info.GetEnumerator();
while( enumerator.MoveNext()) {
switch( enumerator.Name) {
case CompareInfoName:
m_compareInfo = (CompareInfo) info.GetValue(CompareInfoName, typeof(CompareInfo));
break;
}
}
}
// Compares two Objects by calling CompareTo. If a ==
// b,0 is returned. If a implements
// IComparable, a.CompareTo(b) is returned. If a
// doesn't implement IComparable and b does,
// -(b.CompareTo(a)) is returned, otherwise an
// exception is thrown.
//
public int Compare(Object a, Object b) {
if (a == b) return 0;
if (a == null) return -1;
if (b == null) return 1;
if (m_compareInfo != null) {
String sa = a as String;
String sb = b as String;
if (sa != null && sb != null)
return m_compareInfo.Compare(sa, sb);
}
IComparable ia = a as IComparable;
if (ia != null)
return ia.CompareTo(b);
throw new ArgumentException(Environment.GetResourceString("Argument_ImplementIComparable"));
}
[SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)]
public void GetObjectData(SerializationInfo info, StreamingContext context) {
if (info==null) {
throw new ArgumentNullException("info");
}
if( m_compareInfo != null) {
info.AddValue(CompareInfoName, m_compareInfo);
}
}
}
}
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- WebPartDisplayModeEventArgs.cs
- ContentPresenter.cs
- MetadataArtifactLoader.cs
- WpfPayload.cs
- XmlSignificantWhitespace.cs
- AddInControllerImpl.cs
- serverconfig.cs
- CollaborationHelperFunctions.cs
- GeneralTransform3DCollection.cs
- FormsIdentity.cs
- TableRowCollection.cs
- KnownBoxes.cs
- unsafenativemethodsother.cs
- MappingSource.cs
- ApplicationActivator.cs
- SourceElementsCollection.cs
- TabletDeviceInfo.cs
- BStrWrapper.cs
- NodeInfo.cs
- MetadataExchangeClient.cs
- TableChangeProcessor.cs
- XmlSchemaGroup.cs
- HttpFormatExtensions.cs
- Part.cs
- XmlILModule.cs
- PartBasedPackageProperties.cs
- EntityKeyElement.cs
- ObjectDataSourceMethodEventArgs.cs
- BypassElementCollection.cs
- AutomationIdentifier.cs
- ListViewTableRow.cs
- WebPart.cs
- RoutedEventArgs.cs
- ConsoleKeyInfo.cs
- BufferModesCollection.cs
- ConvertBinder.cs
- CaseInsensitiveOrdinalStringComparer.cs
- ItemCheckedEvent.cs
- CallContext.cs
- DSACryptoServiceProvider.cs
- SchemaNames.cs
- IntegerValidator.cs
- HttpClientCertificate.cs
- MetadataPropertyAttribute.cs
- EntityEntry.cs
- WindowsAltTab.cs
- Int32AnimationUsingKeyFrames.cs
- keycontainerpermission.cs
- ScrollViewer.cs
- TabPanel.cs
- AssemblyHash.cs
- Bind.cs
- EventLogReader.cs
- HttpDebugHandler.cs
- UInt64.cs
- Vector3D.cs
- FrameworkTextComposition.cs
- CLRBindingWorker.cs
- XPathNavigator.cs
- DBCommandBuilder.cs
- Oid.cs
- ThreadStaticAttribute.cs
- ObjectTypeMapping.cs
- ObjectDataSource.cs
- ExpressionConverter.cs
- UnauthorizedAccessException.cs
- WorkflowMarkupSerializationException.cs
- RIPEMD160Managed.cs
- Animatable.cs
- TextBox.cs
- BaseParaClient.cs
- RequestCachePolicyConverter.cs
- CodeObject.cs
- WebColorConverter.cs
- Renderer.cs
- PermissionAttributes.cs
- Point.cs
- DebugHandleTracker.cs
- CryptoStream.cs
- CacheAxisQuery.cs
- AttributeCollection.cs
- PassportIdentity.cs
- PauseStoryboard.cs
- Substitution.cs
- AliasExpr.cs
- AddDataControlFieldDialog.cs
- AnnotationResource.cs
- AssociatedControlConverter.cs
- StylusEventArgs.cs
- FrameworkElement.cs
- TypeDescriptionProviderAttribute.cs
- CreateUserErrorEventArgs.cs
- MimeFormatExtensions.cs
- SecureStringHasher.cs
- CapabilitiesSection.cs
- Matrix3D.cs
- SqlCacheDependency.cs
- SpellerStatusTable.cs
- ModifierKeysValueSerializer.cs
- DSACryptoServiceProvider.cs