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
- HashAlgorithm.cs
- DropSource.cs
- storepermissionattribute.cs
- ToggleProviderWrapper.cs
- InputReport.cs
- PerformanceCountersElement.cs
- PropertyPushdownHelper.cs
- UInt64.cs
- NameTable.cs
- Rect3D.cs
- XmlTextWriter.cs
- ManagementEventArgs.cs
- CharAnimationUsingKeyFrames.cs
- Shape.cs
- ControlParameter.cs
- SymbolType.cs
- COM2Enum.cs
- ImageButton.cs
- CodeTypeDeclarationCollection.cs
- Timer.cs
- RenderData.cs
- SamlSecurityTokenAuthenticator.cs
- DescriptionAttribute.cs
- DES.cs
- HtmlImage.cs
- ShapingEngine.cs
- BuildManager.cs
- BulletDecorator.cs
- ReaderWriterLockWrapper.cs
- FormsAuthenticationUser.cs
- HandleCollector.cs
- WebBrowserNavigatingEventHandler.cs
- TypedTableBase.cs
- XamlPointCollectionSerializer.cs
- EditorZoneBase.cs
- BinaryObjectWriter.cs
- XmlSchemaObjectTable.cs
- PerformanceCounterPermissionEntry.cs
- MessagePartSpecification.cs
- DataGridViewCellStateChangedEventArgs.cs
- CheckBoxList.cs
- TreeNodeMouseHoverEvent.cs
- HyperLink.cs
- DoubleLink.cs
- ErrorStyle.cs
- EncoderReplacementFallback.cs
- ButtonChrome.cs
- KerberosRequestorSecurityToken.cs
- WrapperEqualityComparer.cs
- CompensatableTransactionScopeActivity.cs
- DataGrid.cs
- SByte.cs
- QueryContinueDragEventArgs.cs
- DataGridViewRowCancelEventArgs.cs
- ObjectViewFactory.cs
- ResourceSet.cs
- WSUtilitySpecificationVersion.cs
- LineServicesRun.cs
- DataComponentGenerator.cs
- FunctionImportElement.cs
- EnumBuilder.cs
- ParserOptions.cs
- BasicHttpBindingCollectionElement.cs
- InternalDispatchObject.cs
- ResXDataNode.cs
- MultiTrigger.cs
- Stack.cs
- TextSerializer.cs
- ObjectKeyFrameCollection.cs
- PeerContact.cs
- Int32KeyFrameCollection.cs
- DoWorkEventArgs.cs
- AccessibleObject.cs
- CheckBoxList.cs
- PrinterUnitConvert.cs
- CssStyleCollection.cs
- MarkedHighlightComponent.cs
- SizeF.cs
- PrefixQName.cs
- DrawingVisual.cs
- ObjectItemCollection.cs
- XmlSchemaObject.cs
- DesignerTextBoxAdapter.cs
- SessionState.cs
- WorkerRequest.cs
- Stack.cs
- SerializationStore.cs
- InfoCardSymmetricAlgorithm.cs
- TableAutomationPeer.cs
- DBCSCodePageEncoding.cs
- StreamGeometry.cs
- WebServiceHost.cs
- AsyncResult.cs
- FormsAuthenticationTicket.cs
- BCLDebug.cs
- HWStack.cs
- SmtpNtlmAuthenticationModule.cs
- WebPartActionVerb.cs
- Trace.cs
- KeyEvent.cs