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
- EventRoute.cs
- ServiceDescriptionSerializer.cs
- Math.cs
- Panel.cs
- SparseMemoryStream.cs
- PageStatePersister.cs
- LineSegment.cs
- TextChangedEventArgs.cs
- WebPageTraceListener.cs
- PreApplicationStartMethodAttribute.cs
- RadioButtonBaseAdapter.cs
- RotationValidation.cs
- Queue.cs
- ZipIOLocalFileHeader.cs
- Point.cs
- assertwrapper.cs
- SrgsText.cs
- CategoriesDocumentFormatter.cs
- CustomSignedXml.cs
- BitmapEffectGeneralTransform.cs
- uribuilder.cs
- CloudCollection.cs
- WorkflowFileItem.cs
- wgx_exports.cs
- NullExtension.cs
- NavigatorOutput.cs
- Debugger.cs
- SqlGatherConsumedAliases.cs
- ContentElement.cs
- DivideByZeroException.cs
- IndentedWriter.cs
- Visitor.cs
- XmlSchemaComplexContentRestriction.cs
- WindowsIPAddress.cs
- TextContainer.cs
- NumberSubstitution.cs
- AnimationClockResource.cs
- FixedSOMLineCollection.cs
- DataGridViewRowCollection.cs
- AmbiguousMatchException.cs
- IEnumerable.cs
- ServiceRouteHandler.cs
- HtmlWindow.cs
- SerializableAttribute.cs
- CompilerScopeManager.cs
- UnionCodeGroup.cs
- MonthCalendar.cs
- Storyboard.cs
- CursorConverter.cs
- ClockController.cs
- Misc.cs
- XPathNode.cs
- _ConnectOverlappedAsyncResult.cs
- DataGridParentRows.cs
- WindowsGraphics.cs
- ComponentCache.cs
- IQueryable.cs
- ClientSettings.cs
- Slider.cs
- PathFigureCollection.cs
- NamedPermissionSet.cs
- NonDualMessageSecurityOverHttpElement.cs
- FaultDescription.cs
- DataSourceBooleanViewSchemaConverter.cs
- UserControl.cs
- ListenerConnectionModeReader.cs
- SystemFonts.cs
- CdpEqualityComparer.cs
- ErrorItem.cs
- FileSystemWatcher.cs
- DataTableReader.cs
- ToolStripItemRenderEventArgs.cs
- ListenerConnectionModeReader.cs
- CompiledQuery.cs
- SerializableAttribute.cs
- handlecollector.cs
- MessageAction.cs
- EntityContainer.cs
- MetafileHeaderWmf.cs
- ActivityDesignerAccessibleObject.cs
- RangeContentEnumerator.cs
- RTLAwareMessageBox.cs
- FunctionOverloadResolver.cs
- SafeHandles.cs
- TypeConverterValueSerializer.cs
- SecurityTokenResolver.cs
- NamespaceList.cs
- ClientSettingsSection.cs
- UnsignedPublishLicense.cs
- ScrollItemProviderWrapper.cs
- BitmapEffectOutputConnector.cs
- VirtualDirectoryMapping.cs
- ScriptManagerProxy.cs
- UnsafeNetInfoNativeMethods.cs
- RadialGradientBrush.cs
- DialogWindow.cs
- TransactionBehavior.cs
- MessageVersionConverter.cs
- NativeMethods.cs
- ConfigurationConverterBase.cs