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
- PermissionSetEnumerator.cs
- DrawingCollection.cs
- Dictionary.cs
- OledbConnectionStringbuilder.cs
- ContentPresenter.cs
- DBCommandBuilder.cs
- EntityDataSourceSelectedEventArgs.cs
- TextServicesDisplayAttribute.cs
- newinstructionaction.cs
- DocumentPageViewAutomationPeer.cs
- RsaSecurityToken.cs
- XmlNamespaceManager.cs
- Floater.cs
- QueueAccessMode.cs
- NavigationWindow.cs
- odbcmetadatacolumnnames.cs
- RowToFieldTransformer.cs
- Page.cs
- EditorZoneBase.cs
- ConfigurationSettings.cs
- PropagatorResult.cs
- FramingEncoders.cs
- WebPartDescription.cs
- Container.cs
- ValidationEventArgs.cs
- QuotedPrintableStream.cs
- cookie.cs
- ContractSearchPattern.cs
- ProfileInfo.cs
- configsystem.cs
- ResourceSet.cs
- ApplicationServiceManager.cs
- InternalBase.cs
- HyperLinkColumn.cs
- DoubleIndependentAnimationStorage.cs
- InvalidOperationException.cs
- OrderedDictionaryStateHelper.cs
- HtmlInputControl.cs
- SchemaSetCompiler.cs
- RepeatButton.cs
- UserCancellationException.cs
- MulticastOption.cs
- Clock.cs
- EventSinkActivity.cs
- HtmlInputText.cs
- HwndSubclass.cs
- SystemMulticastIPAddressInformation.cs
- Assign.cs
- RoleManagerModule.cs
- SharedDp.cs
- XXXInfos.cs
- TcpClientCredentialType.cs
- AssemblySettingAttributes.cs
- Rect.cs
- NonParentingControl.cs
- WindowsEditBoxRange.cs
- TypedTableGenerator.cs
- GridItemPattern.cs
- ObjectListComponentEditor.cs
- Freezable.cs
- DataGrid.cs
- BrowserDefinition.cs
- QueryContinueDragEvent.cs
- ListenerConfig.cs
- TextTreeUndoUnit.cs
- TextEmbeddedObject.cs
- SessionPageStatePersister.cs
- InternalPolicyElement.cs
- ScriptControlDescriptor.cs
- HttpResponseInternalWrapper.cs
- _ProxyRegBlob.cs
- GroupItem.cs
- UserNameServiceElement.cs
- DataSourceViewSchemaConverter.cs
- ItemsPanelTemplate.cs
- DockPattern.cs
- PointCollectionConverter.cs
- KeyValueSerializer.cs
- DisplayNameAttribute.cs
- AssemblyLoader.cs
- DetailsViewModeEventArgs.cs
- HwndMouseInputProvider.cs
- PromptEventArgs.cs
- EndOfStreamException.cs
- DaylightTime.cs
- QuadraticBezierSegment.cs
- ReflectPropertyDescriptor.cs
- Unit.cs
- EditorPartChrome.cs
- BidOverLoads.cs
- PersonalizationProviderHelper.cs
- ScrollProperties.cs
- XmlObjectSerializer.cs
- InvalidCastException.cs
- UpdatePanelTriggerCollection.cs
- IndexOutOfRangeException.cs
- MemberAssignmentAnalysis.cs
- SelectingProviderEventArgs.cs
- TextContainer.cs
- QueueProcessor.cs