Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / MS / Internal / Data / SortFieldComparer.cs / 1305600 / SortFieldComparer.cs
//---------------------------------------------------------------------------- // //// Copyright (C) 2003 by Microsoft Corporation. All rights reserved. // // // // Description: IComparer class to sort by class property value (using reflection). // // See spec at http://avalon/connecteddata/M5%20Specs/IDataCollection.mht // // History: // 06/02/2003 : [....] - Created // //--------------------------------------------------------------------------- using System; using System.ComponentModel; using System.Collections; using System.Collections.Generic; using System.Reflection; using System.Globalization; using MS.Utility; using System.Windows; namespace MS.Internal.Data { ////// IComparer class to sort by class property value (using reflection). /// internal class SortFieldComparer : IComparer { ////// Create a comparer, using the SortDescription and a Type; /// tries to find a reflection PropertyInfo for each property name /// /// list of property names and direction to sort by /// culture to use for comparisons internal SortFieldComparer(SortDescriptionCollection sortFields, CultureInfo culture) { _sortFields = sortFields; _fields = CreatePropertyInfo(_sortFields); // create the comparer _comparer = (culture == null || culture == CultureInfo.InvariantCulture) ? Comparer.DefaultInvariant : (culture == CultureInfo.CurrentCulture) ? Comparer.Default : new Comparer(culture); } ////// Compares two objects and returns a value indicating whether one is less than, equal to or greater than the other. /// /// first item to compare /// second item to compare ///; <0: o1 < o2; =0: o1 == o2; > 0: o1 > o2 ////// Compares the 2 items using the list of property names and directions. /// public int Compare(object o1, object o2) { int result = 0; // compare both objects by each of the properties until property values don't match for (int k = 0; k < _fields.Length; ++k) { object v1 = _fields[k].GetValue(o1); object v2 = _fields[k].GetValue(o2); result = _comparer.Compare(v1, v2); if (_fields[k].descending) result = -result; if (result != 0) break; } return result; } // Helper method for sorting an ArrayList. If the comparer is a SortFieldComparer, // use the cached-value approach to avoid excessive reflection. For other // comparers, sort the usual way internal static void SortHelper(ArrayList al, IComparer comparer) { SortFieldComparer sfc = comparer as SortFieldComparer; if (sfc == null) { // sort the usual way al.Sort(comparer); } else { // Sort with cached values. // Step 1. Copy the items into a list augmented with slots for // the cached values. int n = al.Count; int nFields = sfc._fields.Length; CachedValueItem[] list = new CachedValueItem[n]; for (int i=0; i
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- AppearanceEditorPart.cs
- BuildResult.cs
- SafeMILHandle.cs
- SizeAnimation.cs
- __Error.cs
- TypeInfo.cs
- Validator.cs
- ProtocolsConfigurationHandler.cs
- CodeTypeDelegate.cs
- WebRequestModuleElement.cs
- SqlException.cs
- ModuleElement.cs
- TimelineCollection.cs
- WorkflowServiceOperationListItem.cs
- DocumentPageHost.cs
- ProxyAttribute.cs
- MouseEventArgs.cs
- HttpEncoderUtility.cs
- CodeGotoStatement.cs
- ImportCatalogPart.cs
- Vector3DAnimation.cs
- Translator.cs
- SystemMulticastIPAddressInformation.cs
- activationcontext.cs
- NavigationHelper.cs
- wgx_exports.cs
- ObjectQuery.cs
- ByValueEqualityComparer.cs
- AuthenticationSection.cs
- ClockController.cs
- bindurihelper.cs
- Thickness.cs
- InvariantComparer.cs
- InteropBitmapSource.cs
- CursorInteropHelper.cs
- CqlLexerHelpers.cs
- Literal.cs
- DoubleAnimationUsingPath.cs
- ThemeInfoAttribute.cs
- ProfileSection.cs
- ImportOptions.cs
- LongValidatorAttribute.cs
- DiscoveryClientChannelBase.cs
- ExpressionNormalizer.cs
- ParseNumbers.cs
- ForEach.cs
- DurableOperationAttribute.cs
- HintTextConverter.cs
- PenLineCapValidation.cs
- SystemIPInterfaceProperties.cs
- LeaseManager.cs
- DbConnectionInternal.cs
- DesignerDataSchemaClass.cs
- ErrorLog.cs
- Semaphore.cs
- Win32.cs
- MsdtcWrapper.cs
- Facet.cs
- ObjectListCommandCollection.cs
- FrugalMap.cs
- Ipv6Element.cs
- SqlDependencyUtils.cs
- DateTimeStorage.cs
- BaseAutoFormat.cs
- DelegateCompletionCallbackWrapper.cs
- Timeline.cs
- DecimalConstantAttribute.cs
- Viewport3DVisual.cs
- DocumentSequence.cs
- NavigationWindow.cs
- URLBuilder.cs
- WebPartDisplayModeCancelEventArgs.cs
- QueryableDataSourceEditData.cs
- MimeFormatter.cs
- IIS7WorkerRequest.cs
- ListViewUpdateEventArgs.cs
- FixedSOMContainer.cs
- SqlErrorCollection.cs
- ConnectionProviderAttribute.cs
- DataListItemEventArgs.cs
- StylusPlugin.cs
- WebResponse.cs
- OrderedDictionary.cs
- XmlAtomicValue.cs
- VectorConverter.cs
- HttpWebRequest.cs
- HtmlString.cs
- ConfigurationLocation.cs
- ImageBrush.cs
- AbstractExpressions.cs
- FlowLayoutPanel.cs
- AssociationSetEnd.cs
- MediaElement.cs
- ExpressionBinding.cs
- RegistrationServices.cs
- SequenceDesigner.cs
- ISCIIEncoding.cs
- COM2FontConverter.cs
- RtfControls.cs
- DrawingContext.cs